class
をkey
としてmap
に入力したいので、私はoperator+
をオーバーロードします。友人の機能としてそれをオーバーロードするとうまくいきます。私はそれをクラス内のメンバ関数としてオーバーロードすると、コンパイルエラーが発生します。演算子をメンバー関数としてオーバーロードすることはできません
error C2678: binary '<': no operator found which takes a left-hand operand of type 'const Syl' (or there is no acceptable conversion)'.
詳細には、これはコンパイルし、コンパイルエラーを生成しません:
Syl.h
bool operator< (const Syl& rhs);
Syl.cpp
bool Syl::operator< (const Syl& rhs) { return false; }
を、これはコンパイルしている間。
Syl.h
friend bool operator< (const Syl& lhs, const Syl& rhs);
Syl.cpp
bool operator< (const Syl& lhs, const Syl& rhs) { return false; }
私は理由を知りません。私は演算子<がバイナリであることを知っていますが、とにかくそれを関数のメンバーとして過負荷にしていますか?
オーバーロードの解決方法と暗黙的な変換が機能するため、とにかく「友人」バージョンが良いアイデアです。 –
友好的なバージョンでは、両方のオペランドが 'const'として指定され、他のバージョンでは入力パラメータが' const'としか指定されません。メソッドをそのようにマークする必要があります...エラーを注意深く読み、 'const'、' signed'などの単語の意味に細心の注意を払う必要があります。 – Kupto