0

私は現在、いくつかのカスタム データ型を含む課題の作業に取り組んでいます。同じデータ型のリストからカスタム データ型を削除しようとしているとリストが不平を言うという問題に遭遇しました。

Error   3   error C2678: binary '==' : no operator found which takes a left-hand operand of type 'customer' (or there is no acceptable conversion)  c:\program files (x86)\microsoft visual studio 10.0\vc\include\list 1194    1   Assignment 1 - Video Store MIS

関連するコードは次のとおりです。

void customerCollection::removeCustomer(customer person)
{
customers.remove(person);
}

また、カスタム データ型には == 演算子が定義されています。

bool customer::operator==(customer &other) const
{
return (l_fullName == other.getName()) && 
       (l_contactNumber == other.getNumber()) && 
       (l_password == other.getPassword()) && 
       (l_username == other.getUsername());
}

リスト型がオーバーロードされた演算子を認識できない理由はありますか?

customerCollection および customer データ型は、プログラムの必須部分です。

[編集] オーバーロードされた演算子は、ヘッダー ファイルで public として定義されています。

4

2 に答える 2

3
bool customer::operator==(customer &other) const

に変更してみてください

bool customer::operator==(const customer &other) const

コレクションのコードがcustomersconst 修飾された顧客を等値演算子に渡す可能性があります。少なくとも、より慣用的 (かつ論理的) です。

于 2012-05-18T11:06:20.120 に答える
0

その理由は、パラメーターがそうではないということですconst

 bool customer::operator==(const customer& other) const

remove定義方法によります。

于 2012-05-18T11:06:12.537 に答える