ベクトルの挿入関数を使用しようとしましたが、コンパイルエラーが発生しました:コンパイルエラー: "std :: vector <Card*> :: insert(int、Card *&)の呼び出しで一致する関数がありません" "C++
src/Hand.cpp:71:78:エラー: 'std :: vector :: insert(int、Card &)'の呼び出しに一致する関数がありません。 Vvalues [place] - > getVcards()。insert(Vvalues [場所] - > getSize() - 1、*カード);
私が挿入する要素の型が挿入の署名と一致しないことを理解していますが、その理由を理解できません。
これは私の関数である:
bool Hand::addCard(Card* card)
{
int place = Hand::searchCard(card); // the case that there is values in Vvalues but no one of them contain &card value
if (place <0)
{
Value* v = new Value(card);
if (place == -1 || place == -2) Vvalues.insert(Vvalues.begin(),v);
else if (place == -3) Vvalues.insert(Vvalues.end(),v);
else if (place == -4) insertValueSortedWay(v);
}
else
{
Vvalues[place]->getVcards().insert(Vvalues[place]->getSize()-1, *card);
}
return true;
}
と私がコンパイルしようと、私はこれを得るより:
src/Hand.cpp:71:78: error: no matching function for call to ‘std::vector<Card*>::insert(int, Card&)’
Vvalues[place]->getVcards().insert(Vvalues[place]->getSize()-1, *card);
問題とどのように私はそれを修正しますが、どのようなものですか?
'Vvalues [place] - > getSize() - 1'はあなたに' Vvalues'のための有効なイテレータを与えません。むしろ 'Vvalues.end()'が必要なように見えます。 –
'insert'はインデックスではなくイテレータをとります。 – molbdnilo
'insert ::'ではなく 'std :: vector :: push_back()'を使いたいと思うかもしれません。 –