
いつもお世話になっております。よろしくお願いします。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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CTabCtrl:TABインデックス単位...
-
多重定義が起きている?--lnk20...
-
typedef unsigned int UINT;が...
-
戻り値を返す関数の前に(void)...
-
【gcc・cygwin】multiple defin...
-
別ソースファイル、同クラス名...
-
C++にてtemplateで受け取った任...
-
_beginthread()の使用について
-
(void)0 はどんな意味ですか
-
構造体を宣言と共に初期化する方法
-
const_castのつかいどころを教...
-
void*型の配列について
-
静的でないメンバ関数の呼び出...
-
gcc: incompatible pointer type
-
GDI+の使用方法について
-
別のファイルの値を得るには?
-
最早開始時間と最遅完了時刻を...
-
20'(角度)の計算がわかりま...
-
信頼区間の1.96や1.65ってどこ...
-
Aの値からBの値を除するとは??
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
静的でないメンバ関数の呼び出...
-
既定のコンストラクタがありま...
-
戻り値を返す関数の前に(void)...
-
C++にてtemplateで受け取った任...
-
【gcc・cygwin】multiple defin...
-
const_castのつかいどころを教...
-
多重定義が起きている?--lnk20...
-
gcc: incompatible pointer type
-
(void)0 はどんな意味ですか
-
C# KeyDownイベントでショート...
-
pictureboxの画像を削除するには?
-
Notepad++の関数リスト表示の変...
-
C#でテンキーの操作は可能でし...
-
アドレスを指定して関数を呼び...
-
ウインドウの移動禁止
-
画面上をクリックするとクリッ...
-
C# Controls.Addで動的に配置し...
-
別ソースファイル、同クラス名...
-
DLLの関数呼び出しで引数がある...
-
プログラム作成教えてください...
おすすめ情報