Оператор вывода перегрузки работает не так, как предполагалось

#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. Спасибо! Разыменование указателя имеет смысл.