2012-02-29 3 views
0

構造体で渡されたintベクトルへの参照を持つコールバック関数を記述しています。添字演算子[]を使用してベクトルの要素にアクセスしようとすると、Intellisenseは、==が2つの要素を特に比較できないことを示します。 エラーC2678:バイナリ '==':左辺'std :: vector < _Ty>'のオペランド(または許容される変換はありません)。しかし、at()関数を使用しても問題はありません。整数添字演算子を使用したベクトル要素の比較は失敗しますが、at関数を使って成功します。

//body of call back function 
searchInfo* argVal = (searchInfo*) Parameter; 
for(int i = argVal->inclStartPos; i < argVal->exclEndPos; ++i){ 
    if(argVal->numVector[i] == argVal->searchNum)//problem here 
     argVal->result = true; 
//this is the structure passed through pointer 

struct searchInfo{ 
int inclStartPos; 
int exclEndPos; 
vector<int>* numVector; 
int searchNum; 
bool result; 
}; 

ベクターの[]演算子とat()関数は同じように(ほとんどの場合は違いはありません)ほぼ同じですが、なぜエラーですか?フィールドnumVectorが

vector<int>* 

簡単に言えばを入力しているので、実際に、あなたはint型で> int型ベクトル<を比較している

答えて

6

は、あなたは、ベクターの配列を宣言しました。 Operator []はvector型の値を返します。

おそらく、宣言のスペルが間違っています。おそらくnumVectorを次のように宣言したかったでしょう:

vector<int> numVector; 
+1

なぜこれがダウンリストされたのか分かりません。可能な限り明確に表現されていないかもしれませんが、正しいのですが、 'numVector'はvector-for-vectorと互換性のあるvector-to-vectorです。したがって、 'numVector [i]'は 'ベクトル'です。 'numVector-> at(i)'は動作します。 – Chowlett

+0

@Chowlett、ご理解いただきありがとうございます! –

+0

@Chowlett:なぜnumVector-> at(i)がうまくいくのかを詳しく教えてください。 AFAIK '=='演算子は両側で同じデータ型を持つため、式は機能しますが、そうではありません。 – AquaAsh

関連する問題