Неоднозначная перегрузка для оператора "<<" - PullRequest
0 голосов
/ 20 марта 2019

Я изучаю перегрузку операторов в c ++, и я хочу знать вывод следующего кода

#include<iostream>
using namespace std;
class xyz
{

 public:
        int i;

    friend ostream & operator<<( ostream & Out , int);
};



ostream & operator<<(ostream & out , int i)
{
    cout<<10+i<<endl;
}


int main()
{
    xyz A;
    A.i=10;

    cout<<10;
}

И я получил две ошибки

  1. ошибка: неоднозначная перегрузкадля 'operator <<' (типы операндов: 'std :: ostream {aka std :: basic_ostream}' и 'int') cout << 10 + i; </p>

  2. ошибка: неоднозначнаяперегрузка для 'operator <<' (типы операндов 'std :: ostream {aka std :: basic_ostream}' и 'int') cout << 10; </p>

может кто-нибудь объяснить, чтоэта проблема ?

Я хочу знать, что произойдет, если я перегружу оператор «<<» для печати int только одним параметром int (очевидно), и я просто хочу напечатать число отдельно, например «cout << 10» intвышеупомянутый код.Так как компилятор решит, какую функцию следует вызывать, когда я пытаюсь напечатать только любое целое число. </p>

Ответы [ 2 ]

2 голосов
/ 20 марта 2019

Очевидно, что проблема в том, что вы написали ostream & operator<<(ostream & out , int i), когда это уже существует. Но ясно, что вы хотели написать это

ostream& operator<<(ostream& out, const xyz& a) // overload for xyz not int
{
    out<<a.i<<endl; // use out not cout
    return out;     // and don't forget to return out as well
}

и это

int main()
{
    xyz A;
    A.i=10;

    cout<<A<<endl; // output A not 10
}
0 голосов
/ 20 марта 2019

// this include brings std::ostream& operator<<(std::ostream&, int)
// into scope and therefore you cannot define your own later
#include<iostream>  

using namespace std;
class xyz
{

 public:
        int i;

    // needs body 
    friend ostream & operator<<( ostream & Out , int)
    {
        return Out;
    }
};



/* cant have this after including ostream
ostream & operator<<(ostream & out , int i)
{
    cout<<10+i<<endl;
}
*/


int main()
{
    xyz A;
    A.i=10;

    cout<<10;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...