我在header
:
class A {
private:
int player;
public:
A(int initPlayer = 0);
A(const A&);
A& operator=(const A&);
~A();
void foo() const;
friend int operator==(const A& i, const A& member) const;
};
int operator==(const A& i, const A& member) const{
if(i.player == member.player){
return 1;
}
return 0;
}
我需要为我的代码部分进行转换:
我 - 是一个int,我的函数接收
A * pa1 = new A(a2);
assert(i == *pa1);
我收到错误non-member function
,我该如何解决?提前谢谢
答案 0 :(得分:3)
您的错误与投射或用户定义的转化无关。
您不能对不是成员函数的函数具有const限定条件,因此:
int operator==(const A& i, const A& member) const;
应该是这样的:
int operator==(const A& i, const A& member);
答案 1 :(得分:1)
从友元函数中删除const限定符。友元函数不是成员函数,因此const限定符毫无意义。
答案 2 :(得分:0)
有两种解决方案:
让operator==()
成为会员功能,而不是朋友:
<强>接口强>:
class A {
private:
int player;
public:
A(int initPlayer = 0);
A(const A&);
A& operator=(const A&);
~A();
void foo() const;
int operator==(const A& rhv) const;
};
<强>实施强>:
int A::operator==(const A& rhv) const
{
return this->player == rhv.player;
}
如果你真的想要operator==()
作为朋友的功能,只需删除const
限定符,如其他帖子所述。