2
//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();

};

我试图重载 << 运算符。我也在尝试练习良好的编码。但是除非我取消注释 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. 

有人可以告诉我在不使用命名空间 std 的情况下重载 << 运算符的正确方法吗?

4

2 回答 2

3

你有using std::ofstream而不是using std::ostream,所以它不知道是什么ostream

您还需要包括<ostream>.

但实际上,没有理由使用using anything; 您应该只用命名空间限定名称(特别是如果这是一个头文件,以避免污染其他文件的全局命名空间):

friend std::ostream& operator<< (std::ostream&, const Dog&);
于 2010-04-23T02:12:19.587 回答
0

using关键字只是意味着让您访问某些东西而不用其命名空间作为前缀。换句话说,using std::ofstream;只是说让你访问std::ofstreamofstream.

您似乎还需要一个#include <iostream>; 这就是编译器不知道是什么的ostream原因。把它放进去,把朋友声明改成friend std::ostream& operator<< (std::ostream&, const Dog&);,然后去掉所有的using东西,因为把using标题放进去是不好的形式,你应该没问题。

于 2010-04-23T02:15:14.017 回答