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型ベクトル<を比較している
なぜこれがダウンリストされたのか分かりません。可能な限り明確に表現されていないかもしれませんが、正しいのですが、 'numVector'はvector-for-vectorと互換性のあるvector-to-vectorです。したがって、 'numVector [i]'は 'ベクトル'です。 'numVector-> at(i)'は動作します。 –
Chowlett
@Chowlett、ご理解いただきありがとうございます! –
@Chowlett:なぜnumVector-> at(i)がうまくいくのかを詳しく教えてください。 AFAIK '=='演算子は両側で同じデータ型を持つため、式は機能しますが、そうではありません。 – AquaAsh