оператор ‹‹ перегрузка

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

};

я пытаюсь перегрузить оператор ‹‹. Я также пытаюсь практиковать хорошее кодирование. Но мой код не скомпилируется, если я не раскомментирую использование пространства имен 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;


person mr.low    schedule 23.04.2010    source источник


Ответы (2)


У вас есть using std::ofstream вместо using std::ostream, поэтому он не знает, что такое ostream.

Вам также необходимо включить <ostream>.

Однако на самом деле нет причин использовать using anything; вы должны просто уточнять имена с пространством имен (особенно, если это заголовочный файл, чтобы не загрязнять глобальное пространство имен других файлов):

friend std::ostream& operator<< (std::ostream&, const Dog&);
person James McNellis    schedule 23.04.2010

Ключевое слово using просто означает, что вы можете получить доступ к чему-либо без префикса его пространства имен. Другими словами, using std::ofstream; просто говорит разрешить вам доступ к std::ofstream как ofstream.

Вам также, кажется, нужен #include <iostream>; вот почему компилятор не знает, что такое ostream. Вставьте это, измените объявление друга на friend std::ostream& operator<< (std::ostream&, const Dog&); и избавьтесь от всего, что связано с using, поскольку ставить using в заголовок — дурной тон, и все должно быть в порядке.

person Mike DeSimone    schedule 23.04.2010