
いつもお世話になっております。よろしくお願いします。C++のプログラミング暦、半月です。
構造体Sのvector、Vを考えます。
struct S{
string strA;
string strB;
int intData;
double doubleData;
};
vector<S> V;
ここで、「Vを、intDataの昇順(第1キー)とdoubleDataの昇順(第2キー)にソートして、最初の要素のstrAとstrBを返す。」処理をしたいです。
それで、イテレータの中でintDataを比較する演算子を以下の通り定義しました。
bool operator < ( const S& left, const S& right ){
return S.intData < S.intData;
}
ですが、次のエラーがでました。引数を2つとる例も見たことがあるのですが、上記定義のどこがおかしいのかがわかりません。
error: `bool XXX::operator>(const S&, const S&)' must take exactly one argument
ちなみにLinux(RedHatEnterprise系)で、コンパイラはgcc3.4.3です。
No.2ベストアンサー
- 回答日時:
bool operator < ( const S& left, const S& right )をXXXのメンバ関数として定義していませんか?
bool operator < ( const S& left, const S& right )は非メンバ関数として定義する必要があります。
早速のご回答、ありがとうございました。ご指摘通り、XXXのメンバ関数としていました。これを、クラスの外で定義すればよいということですね。今、質問した時の環境がないので確認できませんが、そうすると構造体Sの定義もクラスの外でしないといけなくなるのでしょうか。
No.3
- 回答日時:
アクセスする対象が public であれば、グローバルに定義できます。
もしくは、メンバ関数宣言で friend 宣言をつける必要があります。
No.1
- 回答日時:
とりあえず、S.intData とか書いてあるのは left.intData の typo ですか?
そしてエラーメッセージの演算子の向きが逆になっていますが。
この回答への補足
すみません、質問用に表現を修正した時に2箇所間違えてしまいました。
return S.intData < S.intData;
は、
return left.intData < right.intData;
の間違いでした。
< と > の2つ作って、同じエラーが出たのですが、質問用に転記した時に、エラーメッセージだけ > の方を転記していました。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- Visual Basic(VBA) モードレスでユーザーフォームが開け(表示)ません。 4 2022/09/09 11:05
- Excel(エクセル) このコードに追記事項の仕方を教えて下さい。 以下のコード内容に出てくる。セルH3が空白の場合、エラー 4 2023/08/03 00:22
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Excel(エクセル) 【マクロ】フォルダAからダBへファイルを、ファイルの更新日時の条件で、1つづつ移動するには? 3 2022/08/25 09:56
- Excel(エクセル) エクセルVBA、間違っているコード内容を正して頂けませんか? エクセルワークシートに納品書を作ったの 2 2023/08/02 21:13
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/26 17:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
4桁7セグでダイナミック点灯
-
組み込みマイコン
-
一定時間ごとにプログラムを起...
-
C#でトーンカーブの作成
-
多重定義が起きている?--lnk20...
-
カノニカルモードの設定について
-
(void)0 はどんな意味ですか
-
「Aに対するBの割合」と「Aに対...
-
信頼区間の1.96や1.65ってどこ...
-
有効数字について 以前質問をし...
-
Fortran において変数の定義
-
memcpyについて
-
C++の課題が分かりません。
-
Unicode でのWin32アプリのプロ...
-
.NET 小数点以下の切り捨てにつ...
-
バイナリ形式の読み込み
-
c言語マップ探査ゲーム プログ...
-
2÷3などの余りについて
-
c++ 文字列を入力して、一文字...
-
C言語について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【gcc・cygwin】multiple defin...
-
多重定義が起きている?--lnk20...
-
const_castのつかいどころを教...
-
C++にてtemplateで受け取った任...
-
既定のコンストラクタがありま...
-
戻り値を返す関数の前に(void)...
-
静的でないメンバ関数の呼び出...
-
int main()、void main()、void...
-
C# KeyDownイベントでショート...
-
C# Controls.Addで動的に配置し...
-
(void)0 はどんな意味ですか
-
gcc: incompatible pointer type
-
_beginthreadにて発生するコン...
-
C#でラジオボタンを設定に記録...
-
C#でテンキーの操作は可能でし...
-
C++別のオブジェクトからメンバ...
-
CTabCtrl:TABインデックス単位...
-
見た目は同じソースなのにエラ...
-
pictureboxの画像を削除するには?
-
【VC++6.0】イベントハンドラ関...
おすすめ情報