2016-12-03 22 views
-2

ベクトルの挿入関数を使用しようとしましたが、コンパイルエラーが発生しました:コンパイルエラー: "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); 

問題とどのように私はそれを修正しますが、どのようなものですか?

+0

'Vvalues [place] - > getSize() - 1'はあなたに' Vvalues'のための有効なイテレータを与えません。むしろ 'Vvalues.end()'が必要なように見えます。 –

+0

'insert'はインデックスではなくイテレータをとります。 – molbdnilo

+0

'insert ::'ではなく 'std :: vector :: push_back()'を使いたいと思うかもしれません。 –

答えて

0

std :: insertはintをパラメータとしてとらない。

getSize()関数はintを返し、代わりにイテレータを使用します。ここで

は、ベクターの有効なパラメータです:: C++ 11

insert (const_iterator position, const value_type& val);

insert (const_iterator position, size_type n, const value_type& val);

insert (const_iterator position, InputIterator first, InputIterator last);

insert (const_iterator position, value_type&& val);

insert (const_iterator position, initializer_list<value_type> il);

に挿入します
関連する問題