2010-11-12 22 views
11

我想添加一些我格式化使用升壓庫如下提升圖書館格式;得到的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; 

編譯器抱怨說,它無法轉換字符串類型,我試圖追加名爲.str()來什麼格式返回結束,但它仍然抱怨。

我得到的錯誤信息是:

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

任何人有一些見解?

+4

當編譯器會抱怨,它通常以錯誤消息的形式出現。它給你什麼錯誤信息? – 2010-11-12 19:46:11

+0

如何在boost :: str中調用boost :: format? – Anonymous 2010-11-12 19:56:00

回答

16

你需要用的格式在呼叫提振::海峽,就像這樣:

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

當我這樣做時,它給了我錯誤:錯誤C2440:'返回':不能從'std :: string'轉換爲'std :: basic_string <_Elem,_Traits,_Ax> &&' – moowiz2020 2010-11-12 19:58:58

+0

@ moowiz2020:someStringArray是什麼類型?完整類型規範,包括模板參數。 – 2010-11-12 20:05:22

+0

這是一個boost :: container :: vector 。 – moowiz2020 2010-11-12 20:06:09

5

添加「名爲.str()」所得到的格式對象應該是足夠的(和對我的作品)。從你的問題來看,你不清楚你是怎麼做到的,但我注意到你的例子缺少push_back()上的關閉對象。

請注意,你要調用從上次%運算符的格式對象STR(),這樣做的最簡單的方法是隻包住整個格式線在括號像這樣:

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

我複製並將代碼粘貼到該程序中,它給了我錯誤:錯誤C2440:'return':無法從'std :: string'轉換爲'std :: basic_string <_Elem,_Traits,_Ax> &&」。這可能是一個編譯器特定的問題 – moowiz2020 2010-11-13 00:44:33

+0

@ moowiz2020:我使用VS 2008.也許你需要提供一個完整的示例來展示這個問題。 – zdan 2010-11-13 01:00:49