我有一個程序結構類同:非常函數使用常量性
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
這個重載的操作符是正確的。 (我嘗試過一次,只要我能記得它也給了一些錯誤)。
我一直試圖解決這個問題超過五天,仍然沒有線索。
好,使得運營商==常量可能引入了一些無關的錯誤,但它是正確的事情。平等測試不應該修改它們應用到的對象。所以,讓它成爲常量,並處理你遇到的任何其他問題。 –
I _think_' set :: iterator'類型是'const',好像不是可以修改容器的'key',可能會破壞順序。因此''iter-> check(arg)'在一個'const B'實例上被調用,但是check()'不是''constst'因此錯誤。 –
hmjd