boost :: split参数不匹配

时间:2011-12-22 09:38:27

标签: boost c++builder-2010

我试图将AnsiString(someStr).c_str()传递给boost::split()第二个参数,但它拒绝显示参数不匹配!!

这是代码段

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

然而

  

boost :: split(sVec,&#34;这是一个测试&#34;,boost :: is_any_of(&#34;&#34;));

效果很好!

我是否正确将AnsiString转换为c字符串类型???

2 个答案:

答案 0 :(得分:2)

由于sVecvector<std::string>而不是vector<char *>,因此传递给split()的第二个参数必须以某种方式转换为std::string实例。< / p>

std::string类中有一个隐式构造函数可以透明地创建const char *的实例(这就是你的第二个例子成功的原因),但AnsiString::c_str()返回{{1} <},而不是char *,所以这个构造函数不适用。

自己执行转换可以解决您的问题:

const char *

或者,更明确地说:

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

答案 1 :(得分: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());
    }