оператор << перегрузка - PullRequest
       29

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

2 голосов
/ 23 апреля 2010
//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 ++. </p>

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; </p>

Ответы [ 2 ]

3 голосов
/ 23 апреля 2010

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

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

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

friend std::ostream& operator<< (std::ostream&, const Dog&);
0 голосов
/ 23 апреля 2010

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

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

...