朋友,转发声明,C ++

问题描述 投票:0回答:1

所以这让我有些困惑。不会在其他不完整类型之前声明它们。由于“英雄test1”,游戏不会在英雄之前走。由于“朋友无效Game :: vitals(Hero&);”,英雄将无法参加比赛。

这是不可能的循环依赖吗?

class Game
{
public:
    Game();
    void reset(bool show_update = true);

    void map();
    void info();
    void go(string direction);
    void teleport();
    void take(string item);
    void attack(string enemy);
    void combine(string thisOne, string thatOne);
    void calculator();
    void vitals(Hero& h);

    void update_screen();

    Hero  &getPlayer();
    Enemy &getZombie();
    Enemy &getPlant();
    void setOver(bool over);
    bool is_over();
    void killGeorge(bool kill);
    void killMichael(bool kill);


    void setCurrentRoom(Room *next);
    void resetItems();

private:
    Hero      test1;
    Enemy     test2;
    Hero      player;
    Enemy plant;
    Enemy   zombie;
    vector<Room *> rooms;
    bool           gameOver;
    bool           georgeAlive;
    bool           michaelAlive;
};

class Hero: public Character{

  public:
  using Character::Character;
  Hero(string name);

  ~Hero();

  virtual void roar();
  virtual void greetings();
  void staticGreetings();
  friend void Game::vitals(Hero&);

  private:
    string name;
    int health;
    int stamina;
    Room *currentRoom;
    vector <Item> itemsHeld;


};

所以这让我有些困惑。不会在其他不完整类型之前声明它们。由于“英雄test1”,游戏不会在英雄之前走。由于“朋友...

c++ friend
1个回答
0
投票

所以Hero必须在Game之前,因为class Game { ... Hero test1; ... };要求完全定义Hero


0
投票

[带这个答案https://stackoverflow.com/a/4757718/10664057,您是否尝试过向前声明?如果您在游戏前预先声明英雄,它应该可以打破这种循环依赖性。

© www.soinside.com 2019 - 2024. All rights reserved.