1

我试图传递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,"这是一个测试",boost::is_any_of(" "));

效果很好!

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

4

2 回答 2

2

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

类中有一个隐式构造函数std::string可以透明地从 a 创建一个实例const char *(这就是你的第二个示例成功的原因),但是AnsiString::c_str()返回 a char *,而不是 a 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(" "));
于 2011-12-22T09:53:59.007 回答
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());
    }
于 2011-12-22T11:46:08.550 回答