我正在做一个小游戏。
在BattleRecord.h中:
#ifndef _CHARACTER_H_
#define _CHARACTER_H_
#include "Character.h"
#endif
class BattleRecord
{
public:
Character Attacker;
Character Defender;
Status status;
int DamageDealt;
int GoldEarned;
int ExpGained;
};
在Character.h中:
#ifndef _EQUIPMENT_H_
#define _EQUIPMENT_H_
#include "Equipment.h"
#endif
class BattleRecord;
class Character
{
BattleRecord AttackEnemy(Character &Enemy);
}
在BattleRecord.h中:
#ifndef _CHARACTER_H_
#define _CHARACTEr_H_
#include "Character.h"
#endif
#ifndef _BATLE_RECORD_H_
#define _BATLE_RECORD_H_
#include "BattleRecord.h"
#endif
class GUI
{
public:
//GUI Methods, and two of these:
void ViewStats(Character &Player);
void Report(BattleRecord Record)
}
这里的问题是,我的Character.h和BattleRecord.h需要互相包含,这肯定会引起多重重定义问题。因此,我通过添加以下内容在Character.h中使用了前向声明:
class BattleRecord;
问题已解决。但是,然后GUI.h再次需要BattleRecord.h来报告战斗,因此我必须将BattleRecord.h包含到GUI.h中。我还必须包括Character.h才能传递到ViewStat函数中。我遇到了错误,并坚持到了这一点。
最佳答案
您使用的包含防护错误。它们应仅出现在您打算防止包含的文件中,并且应覆盖整个文件。 (不仅包括)。
例如,在BattleRecord.h中
#ifndef _BATTLE_H_
#define _BATTLE_H_
#include "Character.h"
class BattleRecord
{
public:
Character Attacker;
Character Defender;
Status status;
int DamageDealt;
int GoldEarned;
int ExpGained;
};
#endif // _BATTLE_H_
关于c++ - 多个文件中包含多个,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5106650/