0

我在为 const 对象重载 operator<< 时遇到问题。我找不到问题所在

#include <iostream>
using namespace std;
class T
{
    friend ostream& operator<<(ostream& os,T& t)
    {
        os << "Val : " << t.value << endl;
        return os;
    }
private:
    int value;
public:
    T(int v) { value=v; }
    int getValue() const { return value; }
};

int main()
{
    const T t(2);
    cout << t;
    return 0;
}

编译器消息:

错误 C2679:二进制“<<”:未找到采用“const T”类型右侧操作数的运算符(或没有可接受的转换)

4

4 回答 4

2

operator<<()不适用于const对象,因为您已将其声明为

friend ostream& operator<<(ostream& os,T& t)

您需要告诉编译器您希望能够将它与const对象一起使用:

friend ostream& operator<<(ostream& os, const T& t)
于 2013-03-12T16:52:41.247 回答
1

operator<<通常应该通过const引用来获取它的论点:

friend ostream& operator<<(ostream& os, const T& t)

const引用不能绑定到const对象。这是有道理的,否则您将能够const通过引用修改对象。

于 2013-03-12T16:52:43.323 回答
0

只需添加一个 const ,它应该可以工作:

friend ostream& operator<<(ostream& os,const T& t)

于 2013-03-12T16:53:32.113 回答
0

在行中T&进行const引用:

friend ostream& operator<<(ostream& os,T& t)

所以它变成:

friend ostream& operator<<(ostream& os,const T& t)

或者,摆脱&

friend ostream& operator<<(ostream& os,T t)

两者都会在您的代码中给出以下结果:

Val : 2

在控制台中。

于 2013-03-12T16:52:01.593 回答