可能的c ++实现

时间:2010-06-15 07:18:17

标签: c++

我在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,我该如何解决?提前谢谢

3 个答案:

答案 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)

有两种解决方案:

  1. 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;
    }
    
  2. 如果你真的想要operator==()作为朋友的功能,只需删除const限定符,如其他帖子所述。