2010-11-12 7 views
11

Je veux ajouter une chaîne de caractères qui format que je l'aide de la bibliothèque Boost comme suitFormat de bibliothèque Boost; obtenir 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; 

Le compilateur se plaint qu'il ne peut pas convertir les types, et j'ai essayé annexant .str() à la fin de ce format revient, mais il se plaint encore.

Le message d'erreur que je suis arrivé était:

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> &' 

Quelqu'un a une idée?

+4

Lorsque le compilateur se plaint, il le fait généralement sous la forme de messages d'erreur. Quels messages d'erreur cela vous donne-t-il? –

+0

Que diriez-vous d'encapsuler appel à boost :: format dans boost :: str? – Anonymous

Répondre

16

Vous devez envelopper le format dans un appel à boost :: str, comme ceci:

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

Quand je fais cela, il me donne l'erreur: erreur C2440: 'return': impossible de convertir de 'std :: string' en 'std :: basic_string <_Elem, _Traits, _Ax> &&' – moowiz2020

+0

@ moowiz2020: Quel type est someStringArray ? La spécification de type complet, y compris les paramètres de modèle. –

+0

c'est un boost :: container :: vector . – moowiz2020

5

Ajout d'un « .str() » à l'objet de format résultant devrait être suffisant (et fonctionne pour moi). Il n'est pas clair à partir de votre question exactement comment vous l'avez fait, mais j'ai remarqué que votre exemple manque les parenthèses fermantes sur le push_back().

Notez que vous voulez appeler str() sur l'objet de format retourné par le dernier opérateur%, la meilleure façon de le faire est de simplement envelopper la ligne de format tout en parens comme ceci:

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

Je copié et collé votre code dans le programme à ce stade, et il me donne l'erreur: erreur C2440: 'return': impossible de convertir de 'std :: string' à 'std :: basic_string <_Elem, _Traits, _Ax> && '. Cela peut être un problème spécifique au compilateur – moowiz2020

+0

@ moowiz2020: J'ai utilisé VS 2008. Peut-être que vous devez fournir un échantillon complet qui présente le problème. – zdan