我试图了解如何重载'<<'运算符。所以我写了一个简单的测试代码,如果在这里报告部分内容:
class Buffer {
vector<char> buffer;
...
ostream& operator<< (ostream& out, const vector<char>& v) {
out << "[";
size_t last = v.size() - 1;
for(size_t i = 0; i < v.size(); ++i) {
out << v[i];
if (i != last)
out << ", ";
}
out << "]";
return out;
}
...
};
我在 main 中使用类的方式是通常的,但我收到以下错误。为什么?
main.cpp:22:10: error: overloaded 'operator<<' must be a binary operator (has 3 parameters)
ostream& operator<< (ostream& out, const vector<char>& v) {
^
它需要是一个二元运算符: 由于您将运算符添加为类成员,因此将始终在该类的实例上调用它,如下所示:
Buffer myBuffer;
const vector<char> myVector;
myBuffer << myVector;
您应该将其视为等效于以下内容的函数:
myBuffer.DoOperator(myVector);
.. 只需要一个论点,而不是两个论点!所以你应该跳过第一个参数!
class Buffer {
vector<char> buffer;
...
friend
ostream& operator<< (ostream& out, const Buffer& b) {
const vector<char>& v=b.buffer;
out << "[";
size_t last = v.size() - 1;
for(size_t i = 0; i < v.size(); ++i) {
out << v[i];
if (i != last)
out << ", ";
}
out << "]";
return out;
}
...
};