标识符"ostream"是未定义的错误

Avi*_*nik 8 c++ compiler-errors operators ostream

我需要实现一个支持operator << for output的数字类.我有一个错误:"标识符"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
Run Code Online (Sandbox Code Playgroud)

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

And*_*owl 14

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

    std::ostream
//  ^^^^^
Run Code Online (Sandbox Code Playgroud)

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

friend std::ostream& operator << (std::ostream &os, const Number &f);
//     ^^^^^                      ^^^^^
Run Code Online (Sandbox Code Playgroud)

或者,您可以usingostream出现非限定名称之前声明:

using std::ostream;
Run Code Online (Sandbox Code Playgroud)

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

  • 虽然你不应该在头文件中的全局命名空间中放置`using`,因为这可能会导致标题的其他用户发生名称冲突. (3认同)