实现流操作符时编译错误

我正在尝试为继承std::basic_iostream<char>的流类实现流提取操作符。 不幸的是我得到编译错误,我真的不明白。实现流操作符时编译错误

这是我的简化(非功能性)代码:

#include <iostream> 

class MyWhateverClass {

public:

int bla;

char blup;

};

class MyBuffer : public std::basic_streambuf<char> {

};

class MyStream : public std::basic_iostream<char> {

MyBuffer myBuffer;

public:

MyStream() : std::basic_iostream<char>(&myBuffer) {}

std::basic_iostream<char>& operator >> (MyWhateverClass& val) {

*this >> val.bla;

*this >> val.blup;

return *this;

}

};

int main()

{

MyStream s;

s << 1;

int i;

s >> i;

return 0;

}

我收到两个类似的错误: C2678 binary '>>': no operator found which takes a left-hand operand of type 'MyStream',一个在我实现经营者和一个在我得到的线行来自流的int。

有趣的细节是,当我删除操作符实现时,这两个错误都消失了。

任何人都可以告诉这里发生了什么?

回答:

我已经解决了这个问题。你编译错误的原因是阴影。 MyStream::operator>>(MyWhateverClass&)会影响std::basic_iostream::operator>>的所有版本。为了解决此问题,您需要使用using declaration:

class MyStream : public std::basic_iostream<char> { 

MyBuffer myBuffer;

public:

MyStream() : std::basic_iostream<char>(&myBuffer) {}

using std::basic_iostream<char>::operator>>;

std::basic_iostream<char>& operator >> (MyWhateverClass& val) {

*this >> val.bla;

*this >> val.blup;

return *this;

}

};

P.S.最初的回答是完全错误的,不需要保存它)

以上是 实现流操作符时编译错误 的全部内容, 来源链接: utcz.com/qa/260014.html

回到顶部