//using namespace std;
using std::ifstream;
using std::ofstream;
using std::cout;
class Dog
{
friend ostream& operator<< (ostream&, const Dog&);
public:
char* name;
char* breed;
char* gender;
Dog();
~Dog();
};
我试图重载&lt;&lt;运营商。我也在努力练习良好的编码。但是我的代码不会编译,除非我取消注释using namespace std。我一直得到这个错误,我不知道。即时通讯使用g ++编译器。
Dog.h:20: error: ISO C++ forbids declaration of ‘ostream’ with no type
Dog.h:20: error: ‘ostream’ is neither function nor member function; cannot be declared friend. if i add line using std::cout; then i get this error.
Dog.h:21: error: ISO C++ forbids declaration of ‘ostream’ with no type.
有人可以告诉我重载&lt;&lt;的正确方法吗?运算符没有使用命名空间std;
答案 0 :(得分:3)
您有using std::ofstream
而不是using std::ostream
,因此它不知道ostream
是什么。
您还需要加入<ostream>
。
但是,真的,没有理由使用using anything
;你应该只使用命名空间限定名称(尤其是,如果这是一个头文件,以避免污染其他文件的全局命名空间):
friend std::ostream& operator<< (std::ostream&, const Dog&);
答案 1 :(得分:0)
using
关键字只是意味着让您访问某些内容,而不会在其前缀中添加其命名空间。换句话说,using std::ofstream;
只是说让std::ofstream
作为ofstream
访问。
您似乎还需要#include <iostream>
;这就是编译器不知道ostream
是什么的原因。把它放进去,将朋友声明更改为friend std::ostream& operator<< (std::ostream&, const Dog&);
,并删除所有using
内容,因为将using
放入标题是不好的形式,你应该没问题。< / p>