2011-12-22 76 views
1

我想通過AnsiString(someStr).c_str()boost::split()第二個參數,但它否認顯示參數不匹配!boost :: split argument mismatch

這裏是代碼片段

vector<std::string> sVec; 
boost::split(sVec,AnsiString(response).c_str(),boost::is_any_of(" "));//err in this line 
ShowMessage(sVec[1].c_str()); 

然而

升壓::分裂(SVEC, 「這是一個測試」,助推:: is_any_of(」「));

效果很好!

我是否正確地將AnsiString轉換爲C字符串類型?

回答

2

由於sVecvector<std::string>,而不是一個vector<char *>,傳遞給split()第二個參數必須被以某種方式轉換成std::string實例。

有一個在std::string類的隱式構造,可以透明地創建從const char *一個實例(這就是爲什麼你的第二個例子成功),但AnsiString::c_str()返回一個char *,不是const char *,所以此構造方法不適用。

自己執行轉換應該解決您的問題:

boost::split(sVec, (const char *) AnsiString(response).c_str(), 
    boost::is_any_of(" ")); 

,或者更明確:

boost::split(sVec, std::string((const char *) AnsiString(response).c_str()), 
    boost::is_any_of(" ")); 
+0

不幸的是既不可行!不匹配! '[BCC32錯誤] Unit1.cpp(25):E2285找不到匹配'boost :: algorithm :: split <>(vector >,const char *,boost :: algorithm :: detail: :is_any_ofF )' 完整的解析器上下文 Unit1.cpp(22):parsing:void _fastcall TForm1 :: Button1Click(TObject *)' – 2011-12-22 11:26:14

+0

模板分辨率顯然不考慮隱式構造函數。當你說'既沒有作用',你的意思是即使是一個明確的構造函數調用導致相同的錯誤?這很奇怪,因爲在這種情況下不存在歧義。 – 2011-12-22 11:30:52

+0

是的,當然!弗雷德裏克!都給錯誤! – 2011-12-22 11:33:43

0

我做到了以這種方式,因爲boost::split(sVec, (const char *) AnsiString(response).c_str(), boost::is_any_of(" "));給出錯誤(不幸)

AnsiString response="This is a test"; 
    vector<std::string> sVec; 
    const char * cStr=AnsiString(response).c_str(); 
    boost::split(sVec, cStr,boost::is_any_of(" ")); 

    for (int i = 0; i < sVec.size(); i++) { 
      ShowMessage(sVec[i].c_str()); 
    } 
相關問題