C++ 在C+中查找错误+;运算符重载

C++ 在C+中查找错误+;运算符重载,c++,operator-overloading,C++,Operator Overloading,我试图理解如何重载'类缓冲区{ 向量缓冲区; ... 朋友 ostream&运算符类缓冲区{ 向量缓冲区; ... 朋友 ostream&operator它需要是一个二进制运算符:因为您将该运算符添加为类成员,所以它总是在该类的实例上被调用,如下所示: Buffer myBuffer; const vector<char> myVector; myBuffer << myVector; …只接受一个参数,而不是两个!因此您应该跳过第一个参数!它需要是一个二进制运算符:因

我试图理解如何重载'
类缓冲区{
向量缓冲区;
...
朋友
ostream&运算符
类缓冲区{
向量缓冲区;
...
朋友

ostream&operator它需要是一个二进制运算符:因为您将该运算符添加为类成员,所以它总是在该类的实例上被调用,如下所示:

Buffer myBuffer;
const vector<char> myVector;
myBuffer << myVector;

…只接受一个参数,而不是两个!因此您应该跳过第一个参数!

它需要是一个二进制运算符:因为您将运算符添加为类成员,所以它将始终在该类的实例上调用,如下所示:

Buffer myBuffer;
const vector<char> myVector;
myBuffer << myVector;

…只需要一个参数,而不是两个!因此您应该跳过第一个参数!

将其作为友元函数实现,而不是作为方法实现。当它是
缓冲区的成员时,您将如何调用该运算符?更好的是,将其设为自由函数。它与您的类完全无关。将其作为友元函数实现,而不是作为方法实现。如何当它是
Buffer
的成员时,你能调用该操作符吗?更好的是,让它成为一个自由函数。它与你的类没有任何关系。我会用
std::ostream\u迭代器()@HenriMenke我只是复制粘贴了它的函数,并更改了它的签名,使它可以使用,而无需进一步考虑。我会用
std::ostream\u迭代器
()@HenriMenke我诚实地复制粘贴了它的函数,并更改了它的签名,使其可以使用,而无需进一步考虑。可能只是我误读了,但OPs代码中的运算符不能像这样调用
myBuffer可能只是我误读了,但OPs代码中的运算符不能像这样调用
myBuffer
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;
}

...

};
Buffer myBuffer;
const vector<char> myVector;
myBuffer << myVector;
myBuffer.DoOperator(myVector);