不能超载>>运算符与istream c ++

时间:2013-04-17 18:25:09

标签: c++ class overloading operator-keyword

我正在尝试重载>>运算符使用它像我的班级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版本似乎没有任何问题。

为什么?

2 个答案:

答案 0 :(得分:3)

您的代码有两个问题。

1)这声明了一个函数,而不是定义变量:

Base test();

制作:

Base test;

2)您需要参考operator>>的第二个参数:

std::istream &operator >>(std::istream &in, Base& object)

此外,您的代码并不适用于operator<<,至少它不会做您期望它做的事情,除非您从上面解决问题1)。

答案 1 :(得分:1)

你创建对象的方式是错误的,应该用作: Base test;