- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:演算子のオーバーロードでコンパイルエラーが出ます)
C++の演算子オーバーロードでコンパイルエラーが発生
このQ&Aのポイント
- C++のプログラムで、構造体SのvectorをintDataとdoubleDataの昇順でソートし、最初の要素のstrAとstrBを返したいと考えています。
- そのために、演算子<を定義しましたが、コンパイルエラーが発生しています。
- エラーメッセージは`bool XXX::operator>(const S&, const S&)' must take exactly one argumentです。Linux(RedHatEnterprise系)でgcc3.4.3を使用しています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
bool operator < ( const S& left, const S& right )をXXXのメンバ関数として定義していませんか? bool operator < ( const S& left, const S& right )は非メンバ関数として定義する必要があります。
その他の回答 (2)
- RAPTsong
- ベストアンサー率42% (74/175)
回答No.3
アクセスする対象が public であれば、グローバルに定義できます。 もしくは、メンバ関数宣言で friend 宣言をつける必要があります。
質問者
お礼
御礼が遅くなって、どうもすみません。実機で確認しました。どうもありがとうございました。
- koko_u_
- ベストアンサー率18% (459/2509)
回答No.1
とりあえず、S.intData とか書いてあるのは left.intData の typo ですか? そしてエラーメッセージの演算子の向きが逆になっていますが。
質問者
お礼
ご指摘ありがとうございました。補足にて訂正しましたので、よろしくお願いします。
質問者
補足
すみません、質問用に表現を修正した時に2箇所間違えてしまいました。 return S.intData < S.intData; は、 return left.intData < right.intData; の間違いでした。 < と > の2つ作って、同じエラーが出たのですが、質問用に転記した時に、エラーメッセージだけ > の方を転記していました。 よろしくお願いします。
お礼
早速のご回答、ありがとうございました。ご指摘通り、XXXのメンバ関数としていました。これを、クラスの外で定義すればよいということですね。今、質問した時の環境がないので確認できませんが、そうすると構造体Sの定義もクラスの外でしないといけなくなるのでしょうか。