我正在尝试重载>>运算符使用它像我的班级cin。这是代码:
class Base {
public:
int mx;
Base() {}
Base(int x) : mx(x) {}
friend std::istream &operator>>(std::istream &, Base &);
friend std::ostream &operator<<(std::ostream &, const Base &);
};
std::istream &operator >>(std::istream &in, Base &object) {
in >> object.mx;
return in;
}
std::ostream &operator <<(std::ostream &out, const Base &object) {
out << object.mx;
return out;
}
int main() {
Base test();
std::cin >> test;
std::cout << test;
system("PAUSE");
return 0;
}
当我尝试编译时,我得到“错误C2679:二进制'&gt;&gt;' :找不到哪个运算符采用'Base(__ cdecl *)(void)'类型的右手操作数(或者没有可接受的转换)“ 和Intellisense说没有运算符'&gt;&gt;'匹配这些操作数。
ostream版本似乎没有任何问题。
为什么?
答案 0 :(得分:3)
您的代码有两个问题。
1)这声明了一个函数,而不是定义变量:
Base test();
制作:
Base test;
2)您需要参考operator>>
的第二个参数:
std::istream &operator >>(std::istream &in, Base& object)
此外,您的代码并不适用于operator<<
,至少它不会做您期望它做的事情,除非您从上面解决问题1)。
答案 1 :(得分:1)
你创建对象的方式是错误的,应该用作:
Base test;