C ++ friend operator +重载

时间:2011-02-09 06:16:37

标签: c++ overloading friend operator-keyword

我对朋友操作员重载感到困惑。如果我在头文件中编写友元运算符重载函数没有问题,但是一旦我将函数移动到类文件,它就会给我以下错误。我搜索了一些样本,他们都在头文件中写了这个函数。我做错了什么?感谢。

...: error: expected ‘,’ or ‘...’ before ‘&’ token
...: error: ISO C++ forbids declaration of ‘statisticain’ with no type
...: error: ‘main_savitch_2C::statistician operator+(int)’ must have an argument of class or enumerated type


// a.h
class A
{
    public:
        friend A operator + (const A &a1, const A &a2);
};

// a.cpp
#include "a.h"
A operator + (const A &a1, const A &a2)
{
    //
}

3 个答案:

答案 0 :(得分:3)

从您收到的错误消息:

ISO C++ forbids declaration of ‘statisticain’ with no type

我认为你通过倒转最后两个字母拼错了“统计学家”(注意你有“statisticain”而不是“统计学家”。)

这与标题或.cpp文件中是否实现operator+无关。

答案 1 :(得分:1)

我同意之前的回答。另外,如果我可能会问,当两个参数和返回类型属于同一个类时,为什么要将函数设为friend?为什么不让它成为成员,所以第一个参数由this运算符隐式传递?

答案 2 :(得分:0)

将两个param版本移出类声明。或者只使用一个param和this指针。

这是一个缩写的现实世界的例子。

//complexnumber.h 
    class ComplexNumber
    {
        float _r;
        float _i;

        friend ComplexNumber operator+(const ComplexNumber&, const ComplexNumber&);

        public:
            ComplexNumber(float real, float img):_r(real),_i(img) {}
            ComplexNumber& operator + (const ComplexNumber &other);
    };

    ComplexNumber operator+(const ComplexNumber &c1, const ComplexNumber& c2);


//complexnumber.h 
    ComplexNumber operator+(const ComplexNumber &c1, const ComplexNumber& c2)
    {
        return ComplexNumber(c1._r+c2._r, c1._i+c2._i);
    }


    // static
    ComplexNumber& ComplexNumber::operator + (const ComplexNumber &other)
    {
        this->_r = this->_r + other._r;
        this->_i = this->_i + other._i;

        return *this;

    }