我有一个MyList类覆盖<<
运算符,以便能够将自己登录到控制台:
class MyList {
public:
vector<int> *numbers;
};
ostream& operator<<(ostream& os, MyList& l);
实现:
ostream& operator<<(ostream& os, MyList& l) {
for (int i = 0; i < l.numbers->size(); i++) {
os << l.numbers->at(i);
}
return os;
}
在另一个类中,我有一个MyList类型的成员变量,我无法将其打印到控制台。有趣的是,本地MyList变量工作正常:
class A {
public:
MyList list;
void someMethod() const;
};
实现:
void A::someMethod() const {
MyList local;
// Set up local list.
cout << "Local:" << local; // OK!
cout << "Member:" << list; // ERROR!
}
这是错误消息:
Invalid operands to binary expression ('basic_ostream<char,
std::__1::char_traits<char>>' and 'const MyList')
Xcode的自动修复建议引用list
:
cout << "Member:" << &list;
这将编译,但(显然)它会打印list
的地址,而不是我的内容。我不明白这两个变量在<<
运算符方面的区别。有人可以解释一下吗?
答案 0 :(得分:6)
我不认为这是你的真实代码,但我猜是这样的:
ostream& operator<<(ostream& os, const MyList& l)
// |
// note const
要么就是忘记尾随的;
:
class A {
public:
MyList list;
void someMethod();
}; // <------- here
答案 1 :(得分:2)
看来,你在几个地方省略了const
:就目前而言,你的代码应该没问题。但是,如果您具有const
成员函数,则成员为const
,并且您无法将非const
引用绑定到const
对象。因此,通常声明输出运算符将const&
作为第二个参数:
std::ostream& operator<< (std::ostream& os, MyList const& l) {
...
}