标识符“ostream”是未定义的错误

时间:2013-05-14 11:07:15

标签: c++ compiler-errors operators ostream

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

此处是头文件:

Number.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?

2 个答案:

答案 0 :(得分:12)

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

    std::ostream
//  ^^^^^

因此,您的运营商声明应该成为:

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

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

using std::ostream;

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

答案 1 :(得分:0)

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