2010-04-23 8 views
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(); 

}; 

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

Может кто-нибудь сказать мне, как правильно перегрузить оператор < < с с использованием патезраса;

ответ

3

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

Вам также необходимо указать <ostream>.

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

friend std::ostream& operator<< (std::ostream&, const Dog&); 
0

using ключевое слово просто означает, чтобы получить доступ что-то без префиксов это с его пространством имен. В словах orther, using std::ofstream; просто говорит, чтобы вы получили доступ к std::ofstream как ofstream.

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

 Смежные вопросы

  • Нет связанных вопросов^_^