私は次のように構成されたプログラムを持っています:
class A {
private:
std::set<B> members;
public:
void func(const C& arg) {
std::set<B>::iterator iter = members.find(a);
if(iter != members.end()) {
iter->check(arg);
}
}
}
class B {
private:
std::deque<C> writers;
public:
void check(const C& arg) {
if(std::find(writers.begin(), writers.end, arg) != writers.end()) {
/* Code */
}
}
}
class C {
private:
int id;
public:
bool operator==(const C& arg) {
return arg.id == this->id;
}
}
これをコンパイルすると、次のエラーメッセージが表示されます。
no matching function for call to ‘B::check(const C&) const’
note: candidates are: void B::check(const C&) <near match>
そのように宣言するcheck()
とconst
、コンパイラは、==
クラスCのオーバーロードされた演算子をとして宣言することを要求するエラーをスローしますconst
。const
オーバーロードされた演算子を正しい方法で作成するかどうかはわかりません。(私は一度それを試しました、そして私が思い出すことができる限りそれはまたいくつかのエラーを与えました)。
私はこれを5日以上解決しようとしましたが、まだリードがありません。