【发布时间】:2012-11-11 09:15:43
【问题描述】:
我有一个 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 的地址而不是我的内容。关于<< 运算符,我不明白这两个变量之间有什么区别。谁能解释一下?
【问题讨论】:
-
由于在定义类 A 之后缺少分号,在发出一些错误诊断之前,编译器不太可能达到您声称的程度。这真的是你的真实代码吗?如果不是,您认为我们如何推断您的真实代码是什么?
标签: c++ pointers operator-overloading iostream ostream