私は次のコードを持っています:
class Employee {
friend string FindAddr( list<Employee> lst,string name );
public:
Employee(const string& s){ cout << "Employee CTOR" << endl;}
bool operator==( Employee& e) {
return e.name == name;
}
private:
string name;
string addr;
};
string FindAddr( list<Employee> lst, string name ) {
string result = "";
for( list<Employee>::iterator itr = lst.begin(); itr != lst.end(); itr++ ) {
if ( *itr == name ) { // Problematic code
return (*itr).addr;
}
}
return result;
}
私が理解しているように、問題のある行if ( *itr == name )
は次の手順に従う必要があります。
operator==
それがクラスにあることを認識しEmployee
ます。- オペレーターが作業できるように、から
string name
への変換があるかどうかを把握しようとしています。Employee
Employee(const string& s)
オブジェクトのコンストラクターを暗黙的に呼び出し ますstring name
。- に進み
operator==
ます。
ただし、この行はコンパイル時に問題を引き起こします。
Invalid operands to binary expression ('Employee' and 'string' (aka 'basic_string<char>'))
コンストラクターを明示的に呼び出したとしても:
if ( *itr == Employee::Employee(name) )
同じエラーが発生します。
これは紛らわしいです。暗黙のコンストラクター呼び出しがいつ機能するか(および、コンストラクターを明示的に呼び出してもコードが機能しない理由)を理解するのに問題があります。
ありがとう!