我试图将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字符串类型???
答案 0 :(得分:2)
由于sVec
是vector<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());
}