多个包含在多个文件中

Amu*_*umu 1 c++ header include-guards c-preprocessor

我正在做一个小游戏.

在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;
};
Run Code Online (Sandbox Code Playgroud)

在Character.h中:

#ifndef _EQUIPMENT_H_
#define _EQUIPMENT_H_
#include "Equipment.h"
#endif

class BattleRecord;
class Character
{
BattleRecord AttackEnemy(Character &Enemy);
}
Run Code Online (Sandbox Code Playgroud)

在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)
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是,我的Character.h和BattleRecord.h需要相互包含,这肯定会导致多重重新定义问题.因此,我在Character.h中使用了前向声明,添加:

class BattleRecord;
Run Code Online (Sandbox Code Playgroud)

这个问题已经解决了.但是,GUI.h再次需要BattleRecord.h来报告战斗,因此我必须将BattleRecord.h包含在GUI.h中.我还必须包含Character.h才能传入ViewStat函数.我得到了错误并坚持到这个piont.

Mar*_*k H 11

你使用包含警卫错了.它们应出现在您打算仅防止多个包含的文件中,并且它们应覆盖整个文件.(不只是包括).

例如,在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_
Run Code Online (Sandbox Code Playgroud)