9

我需要实现一个支持运算符 << 用于输出的数字类。我有一个错误:“标识符“ostream”未定义”由于某种原因,尽管我包括并尝试了

这里是头文件:

编号.h

#ifndef NUMBER_H
#define NUMBER_H
#include <iostream>
class Number{
public:
//an output method (for all type inheritance from number):
virtual void show()=0;

//an output operator:
friend ostream& operator << (ostream &os, const Number &f);


};

#endif

为什么编译器无法识别友元函数中的 ostream?

4

2 回答 2

16

您需要ostream使用该类所在的命名空间的名称来完全限定名称:

    std::ostream
//  ^^^^^

所以你的运营商声明应该变成:

friend std::ostream& operator << (std::ostream &os, const Number &f);
//     ^^^^^                      ^^^^^

或者,您可以using在未限定名称ostream出现之前进行声明:

using std::ostream;

这将允许您在ostream没有完全限定的情况下编写名称,就像在您当前版本的程序中一样。

于 2013-05-14T11:08:05.790 回答
0

Andy Prowl 的回答很棒,但请不要将“使用 std::ostream”放在标题中。如果你这样做,那么使用你的头文件的其他编译单元也将默认使用这个命名空间,你可能会因为命名空间冲突而得到令人讨厌的编译错误。

于 2013-05-14T11:16:44.207 回答