2012-04-25 9 views
3

私はSTLベクトルの中に格納されている非常に基本的なクラスを持っています。私はそのベクトルをソートしようとしていますが、わかりにくいSTLエラーが発生しています。誰かを助けることができる?C++演算子のオーバーロード:私のカスタムクラスのベクトルのstlソート

// Point.h 
class Point { 
public: 
    Point() : x(0), y(0) {} 
    Point(float x0, float y0) : x(x0), y(y0) {} 
    float x; 
    float y; 
}; 

// Point.cpp, updated const as per given answers 
bool operator< (const Point &p1,const Point &p2) 
{ 
    return p1.x < p2.x || (p1.x==p2.x && p1.y< p2.y); 
} 

ここでも、このPointクラスはベクトルに格納され、ソートされている:

std::vector<Point> tmp=N->points; 
std::sort(tmp.begin(),tmp.end()); 

エラー:

http://ideone.com/WIv0u

誰かが正しい方向に私を指すことができますか?ありがとう!

+1

constのポイント&過負荷への引数としてを試してみてください。 – ds1848

+0

あなたはideone.comの使い方について誤解されているようです。 *プログラムをそこに置くと、エラーメッセージがコンパイルされ生成されます。エラーメッセージを貼り付ける必要はありません。 –

+0

@ MarkRansom:私が知っている限り、ideoneに複数のソースファイルとヘッダーファイルを置くことはできません。 –

答えて

6

bool operator< (constPoint &p1,constPoint &p2)

+0

これを試してみましたが、g ++が重複定義について不平を言っていたので、演算子実装を.cppファイルに移動しなければなりませんでした。狂った量のエラーを取得すると、元の投稿をエラーのペーストビンで2番目に更新します。 – Joseph

+0

@Joseph:実装をcppファイルに移した後、ヘッダーに宣言(本文のない署名)がありますか?あなたは 'std :: sort'を使う場所で見えますか? –

+0

申し訳ありません、それを明確にすることはできますか?私がstd :: sortを使用しているコードでは、 "Point.h"が含まれていて、g ++ main.cpp otherstuff.cpp Point.cppをコンパイルしています。それはあなたが求めていることですか? – Joseph

関連する問題