2010-11-12 8 views
11

Quiero añadir un poco de cuerda que puedo dar formato a utilizar la biblioteca impulso de la siguiente maneraBoost Library Format; conseguir std :: string

boost::container::vector<std::string> someStringVector; 
someStringVector.push_back(
    format("after is x:%f y:%f and before is x:%f y:%f\r\n") % 
    temp.x % 
    temp.y % 
    this->body->GetPosition().x % 
    this->body->GetPosition().y; 

El compilador se queja de que no puede convertir los tipos, y he intentado anexar .str() para el final de qué formato regresa, pero aún así se quejó.

El mensaje de error que me dieron fue:

error C2664: 'void boost::container::vector<T>::push_back(
    const std::basic_string<_Elem,_Traits,_Ax> &)' : 
    cannot convert parameter 1 from 
    'boost::basic_format<Ch>' to 
    'const std::basic_string<_Elem,_Traits,_Ax> &' 

Alguien tiene alguna idea?

+4

Cuando el compilador se queja, generalmente lo hace en forma de mensajes de error. ¿Qué mensaje de error te da? –

+0

¿Qué tal envolver llamada para impulsar :: formato en boost :: str? – Anonymous

Respuesta

16

Usted necesita para dar el formato en una llamada a impulsar :: str, así:

str(format("after is x:%f y:%f and before is x:%f y:%f\r\n") 
    % temp.x % temp.y % this->body->GetPosition().x % this->body->GetPosition().y) 
+0

Cuando lo hago, me da el error: error C2440: 'return': no ​​se puede convertir de 'std :: string' a 'std :: basic_string <_Elem, _Traits, _Ax> &&' – moowiz2020

+0

@ moowiz2020: ¿Qué tipo es someStringArray ? La especificación de tipo completo, incluidos los parámetros de plantilla. –

+0

es un impulso :: contenedor :: vector . – moowiz2020

5

Adición de un ".str()" al objeto de formato resultante debería ser suficiente (y funciona para mí) No está claro a partir de su pregunta exactamente cómo lo hizo, pero me di cuenta de que en su ejemplo faltan los parens de cierre en push_back().

Tenga en cuenta que desea llamar str() en el objeto de formato de regresar de la última operador%, la manera más fácil de hacerlo es simplemente envolver toda la línea de formato en el parens así:

boost::container::vector<std::string> someStringVector; 
someStringVector.push_back(
    (format("after is x:%f y:%f and before is x:%f y:%f\r\n") % 
    temp.x % 
    temp.y % 
    this->body->GetPosition().x % 
    this->body->GetPosition().y).str()); 
+0

Copié y pegué su código en el programa en ese momento, y me da el error: error C2440: 'return': no ​​se puede convertir de 'std :: string' a 'std :: basic_string <_Elem, _Traits, _Ax> && '. Puede ser un problema específico del compilador – moowiz2020

+0

@ moowiz2020: utilicé VS 2008. Quizás deba proporcionar una muestra completa que muestre el problema. – zdan

Cuestiones relacionadas