2

我正在尝试重载 >> 运算符,以便在我的班级中像 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: binary '>>' : no operator found 它采用'Base (__cdecl *)(void)' 类型的右手操作数(或没有可接受的转换)”和 Intellisense表示没有运算符 '>>' 匹配这些操作数。

ostream 版本似乎没有任何问题。

为什么?

4

2 回答 2

3

您的代码有两个问题。

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

Base test();

做到这一点:

Base test;

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

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

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

于 2013-04-17T18:28:01.800 回答
1

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

于 2013-04-17T18:33:05.813 回答