所以这让我有些困惑。不会在其他不完整类型之前声明它们。由于“英雄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”,游戏不会在英雄之前走。由于“朋友...
所以Hero
必须在Game
之前,因为class Game { ... Hero test1; ... };
要求完全定义Hero
。
[带这个答案https://stackoverflow.com/a/4757718/10664057,您是否尝试过向前声明?如果您在游戏前预先声明英雄,它应该可以打破这种循环依赖性。