我正在重载我的类的ostream / istream操作符函数友好函数,但是它给出了错误:
ostream没有命名类型。
没有或有头文件#include<iostream>
它会出错
date.h:24:9: error: ‘ostream’ does not name a type friend ostream& operator<< (ostream &out, Date &today);
答案 0 :(得分:1)
名称ostream
位于std
- 命名空间中,因此您需要引入该名称。最不具侵入性的方法是明确限定它:
friend std::ostream& operator<< ....
^^^
另一种方法是使用using
- 或using namespace
- 指令。它们允许您将名称/ s导入翻译单元的其余部分:
using std::ostream; // cherry-pick the names
friend ostream& operator<< ....
或
using namespace std; // fire a shotgun with a huge and growing bunch of names
friend ostream& operator<< ....
这些都有优点和缺点:
std::pow
与awesome_math_lib::pow
)。对于良好的C ++,一致同意的经验法则 - 代码是永远不要在头文件中的全局命名空间中使用using
或using namespace
,并且在源文件中小心。
许多人也同意std::
是如此简短和标准,他们从不使用using
或using namespace
(函数除外),只是坚持键入std::...
答案 1 :(得分:0)
您必须使用
指定名称空间std
std::ostream
代码。
另一种方法是
using namespace std;
但不是首选。
答案 2 :(得分:-1)
您需要包含标题<iostream>
并使用限定名称
std::ostream
或包含指令
using std::ostream;
甚至
using namespace std;
输出流的标准类ostream
在名称空间std
中声明。