Я прочитал Должен оператор<< быть реализован как друг или как функция-член? а также Оператор вставки перегрузки в C ++, похоже на похожую проблему, но не решил мою собственную проблему.
Мой заголовочный файл:
using namespace std;
class Animal {
private:
friend ostream & operator<< (ostream & o, Dog & d);
int number;
public:
Animal(int i);
int getnumber();
};
ostream & operator<< (ostream & o, Dog & d);
Мой cpp:
using namespace std;
int Animal::getnumber(){
return number;
}
ostream & Animal::operator<< (ostream & o, Dog & d){
//...
}
Animal::Animal(int i) : number(i){}
Реализация проста, но я получаю ошибку: в cpp — Ошибка: класс «Животное» класс не имеет оператора «член»<<». Я действительно не понимаю, потому что я уже объявил оператор вставки в друзья в Animal, почему я все еще получаю эту ошибку? (публичное размещение ostream не помогает)
Это не член Animal
класс, и не должно быть. Так что не определяйте это как единое целое. Определите это как свободную функцию, удалив Animal::
префикс.
ostream & operator<< (ostream & o, Dog & d){
//...
}
Других решений пока нет …