运算符“ <<”的含糊不清的重载

时间:2019-03-20 14:12:22

标签: c++ operator-overloading

我正在学习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;

  2. 错误:“ operator <<”的模棱两可的重载(操作数类型为“ std :: ostream {aka std :: basic_ostream}”和“ int”) cout << 10;

任何人都可以解释出什么问题吗?

我想知道,如果我重载一个“ <<”运算符以仅使用一个参数int(obvious)打印int,而我只想单独打印一个数字,如上面提到的“ cout << 10” int码。 因此,当我尝试仅打印任何整数时,编译器将如何决定应调用哪个函数。

2 个答案:

答案 0 :(得分:2)

显然,问题在于您已经写了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
}

答案 1 :(得分:-1)

BuildConfig.VERSION_NAME