Я пытаюсь реализовать классы, которые используют наследование/полиморфизм, и я не могу понять, почему я получаю эти недопустимые операнды к двоичной ошибке выражения («basic ostream char std 1 char charits char и void). Ошибка находится внутри функции, называемой анимация ниже, где она окружена двумя **, прямо над главной. C-> move по какой-то причине дает эту ошибку, но c-> name нет. Я реализовал все остальное, и все остальное кажется чтобы работать должным образом. это просто это одна ошибка. Может кто-то пожалуйста, объясните, что происходит? в основном, базовый класс здесь существо, а все остальные классы вытекающих из него.неверные операнды в двоичное выражение?
#include <iostream>
#include <string>
using namespace std;
class Creature {
public:
Creature(string new_name) {
its_name=new_name;
}
virtual void move() const=0;
virtual bool isMortal() const =0;
string name() const {
return its_name;
}
virtual ~Creature();
private:
string its_name;
};
class Phoenix:public Creature {
public:
Phoenix(string new_name):Creature(new_name) {};
virtual void move() const{
cout<<"Squawkes, who is immortal, will now fly.";
}
virtual bool isMortal() const {
return false;
}
virtual ~Phoenix();
};
class Giant:public Creature {
public:
Giant(string new_name,int new_lbs): Creature(new_name) {
lbs=new_lbs;
}
virtual void move() const {
if (lbs<20) {
cout<<"Frawp, who is mortal, will now tromp.";
}
else {
cout<<"Gridwulfa, who is mortal, will now lumber.";
}
}
virtual bool isMortal() const {
return true;
}
virtual ~Giant();
private:
int lbs;
};
class Centaur:public Creature {
public:
Centaur(string new_name):Creature(new_name) {};
virtual void move() const{
cout<<"Squawkes, who is immortal, will now fly.";
}
virtual bool isMortal() const {
return false;
}
virtual~Centaur();
};
void animate(const Creature* c) //need to add & or is * sufficient?
{
cout << c->name() << ", who is ";
if (c->isMortal())
cout << "mortal";
else
cout << "immortal";
**cout << ", will now " << c->move() << ".\n";**
}
Here is my main:
int main() {
Creature* creatures[4];
creatures[0] = new Phoenix("Squawkes");
// Giants have a name and a weight in tons. Giants under 20 tons
// walk by tromping; giants weighing at least 20 tons lumber.
creatures[1] = new Giant("Frawp", 17);
creatures[2] = new Giant("Gridwulfa", 22);
creatures[3] = new Centaur("Florence");
cout << "Here are the creatures." << endl;
for (int k = 0; k < 4; k++)
animate(creatures[k]);
// Clean up the creatures before exiting
cout << "Cleaning up." << endl;
for (int k = 0; k < 4; k++)
delete creatures[k];
}
Я не должен для изменения основного или анимационного. Я должен правильно реализовать все классы
В сообщении об ошибке говорится, что не так. Вы не можете '<<' поток с пустотой. –
'move' должен возвращать строку; один глагол («пиломатериалы», «муха», «тромп»). Вы жестко закодировали строку, которую 'animate' должен построить в' move'. – molbdnilo