-1

Eclipse では、push_back 行に次のエラーが表示されます。

無効な引数 ' 候補は次のとおりです: void push_back(const std::basic_string<char,std::char_traits<char>,std::allocator<char>> &)

私の質問は、ベクターに basic_strings ではなく文字列が含まれていることを確認するにはどうすればよいですか?

このベクトルにアクセスしたい別のコードで、コンパイルに問題があることがわかりました。後で、それが「std::string」ではなくbasic_stringであることを知っているようです。現在のコンテキストでは、それを知っています私はcharのみを使用しますが、スーパークラスをそこに保持したいので、将来、w-char ectにスワップした場合に何も調整する必要がありません。

すでに文字列にキャストしようとしましたが、うまくいかないようです

 std::string test = (std::string)tokens[1];

最終的な目標は、そのベクトルでオブジェクトを構築することです

if(tokens->size() == 3){
TestObject test = new TestObject(tokens[1],)tokens[2])
}

これは、stackoverflow ユーザーによって提案された Stackoverflow で見つけた 関数ですFunction Origin

助けてくれてありがとう。

void TestClass::splitString(const std::string &str, std::vector<std::string>* tokens){
    boost::char_separator<char> sep(",");

    std::string separator;
    boost::tokenizer< boost::char_separator<char> > tok(str,sep);
    for(boost::tokenizer< boost::char_separator<char> >::iterator it=tok.begin(); it != tok.end(); ++it)
    {    
      tokens->push_back(*it);
    }    
}

「TestObject::defineX(std::basic_string*)」の呼び出しに一致する関数がありません</p>

accessing with defineX(vector[1].data());

「TestObject::defineX(std::vector >&)」の呼び出しに一致する関数がありません</p>

accessing with defineX(vector[1]);

関数の定義は次のように宣言されています (これが問題なのでしょうか?):

typedef std::string td_MAP_KEY;
td_MAP_VALUE * TestObject::defineX(td_MAP_KEY key);

私はこのようにメソッドを呼び出します。これをコンパイルしたい場合は、うまくいくはずです。残念ながら、ここに完全なコードを貼り付けることができませんが、以下のコードで行う必要があります。

std::string x = "one,two,three,four"
std::vector<std::string> * splittedString = new std::vector<std::string>;
splitString(x,splittedString);
TestObject * object = new TestObject();
object->defineX(splittedString[1]);
4

1 に答える 1

0

このコードの問題:

std::vector<std::string> * splittedString = new std::vector<std::string>;
    :
object->defineX(splittedString[1]);

ベクトル ポインターとして定義splittedStringし、それを (ベクトルの配列ではなく) 単一のベクトルに向けてから、(存在しない) ベクトルの配列の 2 番目の要素にアクセスしようとすることです。あなたはおそらくしたいです

object->defineX((*splittedString)[1]);

これは、ベクトル ポインターを逆参照してから、ベクトルの 2 番目の要素を取得します。

于 2012-07-21T18:43:30.090 に答える