Я создал класс Animal с некоторыми базовыми свойствами и добавил конструктор без данных. Я также перегрузил оператор ostream для печати свойств.
Животное.cpp
#include<bits/stdc++.h>
using namespace std;
class Animal {
string name;
int action;
public:
Animal() {
name = "dog";
action = 1;
}
ostream& write(ostream& os) {
os << name << "\n" << action << "\n";
return os;
}
friend ostream& operator<<(ostream& os, Animal &animal) {
return animal.write(os);
}
};
int main() {
cout << "Animal: " << Animal() << "\n";
}
Однако я получаю ошибку в основном из-за недопустимых операндов для двоичного выражения ostream и Animal. Он отлично работает, если я объявляю Animal, а затем вызываю cout. Но как заставить его работать так (инициализировать и одновременно запускать)?
Второй параметр operator<<
объявлен как Animal &
; Animal()
является временным и не может быть привязан к lvalue-ссылке на неконстантный.
Вы можете изменить тип на const Animal &
; временный может быть привязан к lvalue-ссылке на const. (Тогда write
также нужно пометить как const
.)
class Animal {
string name;
int action;
public:
Animal() {
name = "dog";
action = 1;
}
ostream& write(ostream& os) const {
os << name << "\n" << action << "\n";
return os;
}
friend ostream& operator<<(ostream& os, const Animal &animal) {
return animal.write(os);
}
};
На заметку: Почему я не должен #include <bits/stdc++.h>?