1

2 番目の引数に渡そうとして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

sVecは でvector<std::string>あり ではないため、vector<char *>に渡される 2 番目の引数はsplit()何らかの方法でインスタンスに変換する必要がありstd::stringます。

std::stringクラスには a からインスタンスを透過的に作成できる暗黙のコンストラクターがありますconst char *(これが 2 番目の例が成功する理由です) が、AnsiString::c_str()char *は aではなく 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 に答える