#c 11
Вопрос:
Я пытаюсь перегрузитьlt;lt;, чтобы напечатать защищенные члены класса в виде строки, но когда я пытаюсь использовать его в другом классе std::cout lt;lt; player2;
, я получаю «0x7f60b0100» в качестве вывода.
«игрок 2» — это Актер*, поэтому я не уверен, что происходит.
class Actor { private: string type; protected: int health; int damage; vectorlt;MoveTypegt; moves; public: Actor(string type, int health): type{ type }, health{ health }{damage=0;} virtual void Hit(int damage){health = health-damage;} virtual void Heal(int amount){health= amount;} const vectorlt;MoveTypegt;amp; GetMoves() const {return moves;} bool IsDead() { return health lt;= 0; } friend ostreamamp; operatorlt;lt;(ostreamamp; out, const Actoramp; actor){ return (out lt;lt; "DAMAGE DONE: " lt;lt; actor.damage lt;lt; "HEALTH: "lt;lt; actor.health); } };
Ответ №1:
Как вы уже сказали, это указатель на Actor
экземпляр, поэтому вы печатаете значение этого указателя.
Вам нужно разыменовать указатель:
std::cout lt;lt; *player2;
Комментарии:
1. Спасибо! Разыменование указателя имеет смысл.