ошибка: «Integer Integer :: operator << (const Integer &, const Integer &)» должен принимать ровно один аргумент - PullRequest
1 голос
/ 03 января 2012
#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;
}

Этот код выдает вышеуказанную ошибку, когда я удаляю ключевое слово friend из объявления оператора <<. <br> Здесь нет ничего личного, так почему это происходит?

Ответы [ 2 ]

3 голосов
/ 03 января 2012

Когда объявление оператора не содержит friend, объявление объявляет члена, и член имеет свой класс в качестве своего неявного первого аргумента. С двумя явными аргументами это дает три аргумента для двоичного оператора.

0 голосов
/ 03 января 2012

Правильная версия должна быть такой

#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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...