开发者

C++ friend operator+ overloading

开发者 https://www.devze.com 2023-02-09 16:32 出处:网络
I\'m confused about friend operator overloading.It has no problem if I write the friend operator overloading function within the header file, but it gives me the following errors once I moved the func

I'm confused about friend operator overloading. It has no problem if I write the friend operator overloading function within the header file, but it gives me the following errors once I moved the function to class file. I googled some samples and they all written the function in the header file. What did I do wrong? Thanks.

...: 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)
{
    //
}


From the error message you're getting:

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

I think that you misspelled "statistician" by reversing the last two letters (note that you have "statisticain" instead of "statistician.")

This should have nothing to do with whether operator+ is implemented in the header or the .cpp file.


I agree with the previous answer. Also, if I may ask, why make the function a friend when both arguments and the return type are of the same class? why not make it a member so the first argument is passed implicitly by the this operator?


Move the two param version out of the class declaration. Or just use one param and the this pointer.

Here's an abbreviated real world example.

//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;

    }
0

精彩评论

暂无评论...
验证码 换一张
取 消