查找运算符重载C++错误



我试图了解如何重载'<<'运算符。所以我写了一个简单的测试代码,如果在这里报告部分内容:

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;
}
...
};

最新更新