• ベストアンサー
※ 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を使用しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • colder
  • ベストアンサー率43% (30/69)
回答No.2

bool operator < ( const S& left, const S& right )をXXXのメンバ関数として定義していませんか? bool operator < ( const S& left, const S& right )は非メンバ関数として定義する必要があります。

aneja
質問者

お礼

早速のご回答、ありがとうございました。ご指摘通り、XXXのメンバ関数としていました。これを、クラスの外で定義すればよいということですね。今、質問した時の環境がないので確認できませんが、そうすると構造体Sの定義もクラスの外でしないといけなくなるのでしょうか。

その他の回答 (2)

  • RAPTsong
  • ベストアンサー率42% (74/175)
回答No.3

アクセスする対象が public であれば、グローバルに定義できます。 もしくは、メンバ関数宣言で friend 宣言をつける必要があります。

aneja
質問者

お礼

御礼が遅くなって、どうもすみません。実機で確認しました。どうもありがとうございました。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

とりあえず、S.intData とか書いてあるのは left.intData の typo ですか? そしてエラーメッセージの演算子の向きが逆になっていますが。

aneja
質問者

お礼

ご指摘ありがとうございました。補足にて訂正しましたので、よろしくお願いします。

aneja
質問者

補足

すみません、質問用に表現を修正した時に2箇所間違えてしまいました。   return S.intData < S.intData; は、   return left.intData < right.intData; の間違いでした。 < と > の2つ作って、同じエラーが出たのですが、質問用に転記した時に、エラーメッセージだけ > の方を転記していました。 よろしくお願いします。