クラスで binary_search を使用したかったので、operator< を定義しました。すべてがメインファイルにある場合は機能しますが、クラスを別のファイルに書き込むとリンカエラーが発生しました。
問題を示す最も単純な例は Bh です。
class B
{
public:
~B(void);
string b;
int v;
B(int val, string bb);
friend bool operator< (const B &lhs, const B &rhs);
};
bool operator< (const B &lhs, const B &rhs){
return lhs.v < rhs.v;
};
B.cpp はコンストラクターを定義するだけです。メインは次のようなものです:
#include "B.h"
int main( int argc, const char* argv[] )
{
vector<B> vec;
B a1(2, "gg");
B a2(4, "gdhd");
vec.push_back(a2);
vec.push_back(a1);
bool pos = binary_search(vec.begin(),vec.end(), B(2, "ghd"));
}
エラー LNK2005: "bool __cdecl operator<(class B const &,class B const &)" (??M@YA_NABVB@@0@Z) already defined in Main.obj: 致命的なエラー LNK1169: 1 つまたは複数の乗算定義シンボル見つかった
それを修正する方法?