Class 没有命名 C++ 代码中的类型错误
Class does not name a type error in C++ Code
我正在尝试用 C++ 制作一个小游戏,但在将我的玩家 class 添加到我的游戏 class 中时,我已经 运行 遇到了问题。我认为这是一个循环依赖问题,但是转发声明 class 并没有帮助解决这个问题!我到处都看过了,就是想不通,所以希望能对为什么这行不通有一些了解。我只包括 headers 因为我目前在源代码中只有我的构造函数定义
Game.h
#ifndef GAME_H_INCLUDED
#define GAME_H_INCLUDED
#include "Player.h"
//only one instance of a game should be running
//make singleton class
class Game {
private:
bool playing;
Player * Player = 0;
static Game * inst;
Game() {}
public:
Player * GetPlayer() { return Player; } //Getting a "Player does not name a type" error here???
void AddPlayer(int health, int mana, int strength) { Player = new Player(health, mana, strength)}
bool StillPlaying() { return playing; }
void EndGame() { playing = false; }
static Game * GetInstance();
void StartGame();
};
#endif // GAME_H_INCLUDED
Player.h
#ifndef PLAYER_H_INCLUDED
#define PLAYER_H_INCLUDED
#include "Subject.h"
class Player : public Subject {
protected:
int health;
int mana;
int strength;
public:
Player(int health, int mana, int strength);
int GetHealth() { return health; };
int GetMana() { return mana; }
int GetStrength() { return strength; }
void TakeDamage(int enemyStrength) { health -= enemyStrength; }
void Attack();
void Heal();
void Event();
};
#endif // PLAYER_H_INCLUDED
错误出现在 Game.h 文件中,特别是在 GetPlayer() 函数中指出“'Player' 没有命名类型”。我真的很困惑,因为它 不会 在我声明 Player 成员变量时给我一个错误??
您有一个 class Player
和一个名为 Player
的 Game
成员。一旦遇到成员声明,Game
class 中对 Player
的所有引用都将指向成员变量,而不是全局类型。
有很多方法可以解决这个问题(例如,::Player *GetPlayer
),但最好且最不容易混淆的解决方法是重命名成员变量或类型,使其具有不同的名称。
我正在尝试用 C++ 制作一个小游戏,但在将我的玩家 class 添加到我的游戏 class 中时,我已经 运行 遇到了问题。我认为这是一个循环依赖问题,但是转发声明 class 并没有帮助解决这个问题!我到处都看过了,就是想不通,所以希望能对为什么这行不通有一些了解。我只包括 headers 因为我目前在源代码中只有我的构造函数定义
Game.h
#ifndef GAME_H_INCLUDED
#define GAME_H_INCLUDED
#include "Player.h"
//only one instance of a game should be running
//make singleton class
class Game {
private:
bool playing;
Player * Player = 0;
static Game * inst;
Game() {}
public:
Player * GetPlayer() { return Player; } //Getting a "Player does not name a type" error here???
void AddPlayer(int health, int mana, int strength) { Player = new Player(health, mana, strength)}
bool StillPlaying() { return playing; }
void EndGame() { playing = false; }
static Game * GetInstance();
void StartGame();
};
#endif // GAME_H_INCLUDED
Player.h
#ifndef PLAYER_H_INCLUDED
#define PLAYER_H_INCLUDED
#include "Subject.h"
class Player : public Subject {
protected:
int health;
int mana;
int strength;
public:
Player(int health, int mana, int strength);
int GetHealth() { return health; };
int GetMana() { return mana; }
int GetStrength() { return strength; }
void TakeDamage(int enemyStrength) { health -= enemyStrength; }
void Attack();
void Heal();
void Event();
};
#endif // PLAYER_H_INCLUDED
错误出现在 Game.h 文件中,特别是在 GetPlayer() 函数中指出“'Player' 没有命名类型”。我真的很困惑,因为它 不会 在我声明 Player 成员变量时给我一个错误??
您有一个 class Player
和一个名为 Player
的 Game
成员。一旦遇到成员声明,Game
class 中对 Player
的所有引用都将指向成员变量,而不是全局类型。
有很多方法可以解决这个问题(例如,::Player *GetPlayer
),但最好且最不容易混淆的解决方法是重命名成员变量或类型,使其具有不同的名称。