C++ 实现流运算符时的编译错误
我试图为一个继承std::basic_iostream的流类实现流提取操作符。 不幸的是,我得到了编译错误,我真的不明白 这是我的简化非功能代码:C++ 实现流运算符时的编译错误,c++,stl,stream,operators,shadowing,C++,Stl,Stream,Operators,Shadowing,我试图为一个继承std::basic_iostream的流类实现流提取操作符。 不幸的是,我得到了编译错误,我真的不明白 这是我的简化非功能代码: #include <iostream> class MyWhateverClass { public: int bla; char blup; }; class MyBuffer : public std::basic_streambuf<char> { }; class MyStream : publi
#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二进制“>>”:未找到接受类型为“MyStream”的左侧操作数的运算符,一个在实现运算符的行中,另一个在从流中获取int的行中
有趣的是,当我删除操作符实现时,这两个错误都消失了
有人能告诉我这里发生了什么吗?我已经解决了这个问题。出现编译错误的原因是阴影。您的MyStream::operator>>MyWhateverClass&隐藏所有版本的std::basic\u iostream::operator>>。要解决此问题,您需要使用: 另外,最初的答案是完全错误的,不需要保存它太棒了,这解决了它:在这种情况下使用对我来说是新的。。。也谢谢你的链接。
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;
}
};