错误:'Integer Integer :: operator<<(const Integer&,const Integer&)'必须只取一个参数

时间:2012-01-03 08:16:07

标签: c++ operator-overloading

#include <iostream>
#include <fstream>
using namespace std;

class Integer 
{
    public:
    int i;

    Integer (int ll = 0, int k = 0) : i (ll) 
    {
        cout << "\nconstructor A\n";
    }

    Integer operator<< (const Integer& left, const Integer& right);
};

Integer operator<< (const Integer& left, const Integer& right)
{
    cout << "\ndsfdsfdsf : " << "===" <<  right.i << "\n";
    return left ;
}

int main () 
{
    Integer l;

    l << 5 << 3 << 2;

    return 0;
}

当我从&lt;&lt;的声明中删除关键字friend时,此代码会给出上述标题错误。运营商。
这里没有任何私密的东西,为什么会这样呢?

2 个答案:

答案 0 :(得分:3)

当运算符声明不包含friend时,声明声明一个成员,并且成员将其类作为其隐式的第一个参数。使用两个显式参数,这会为二元运算符生成三个参数。

答案 1 :(得分:0)

正确的版本应该是这样的

#include <iostream>
#include <fstream>
using namespace std;

class Integer 
{
    public:
    int i;

    Integer (int ll = 0, int k = 0) : i (ll) 
    {
        cout << "\nconstructor A\n";
    }

    Integer operator<< (const Integer& right)
    {
        cout << "\ndsfdsfdsf : " << "===" <<  right.i << "\n";
        return *this ;
    }
};



int main () 
{
    Integer l;
    l << 5 << 3 << 2;
    return 0;
}