例如。我们有class A
及其派生类; class B
。是否可以在B
中实例化class A
类型的指针?
#ifndef WARRIOR_H
#define WARRIOR_H
#include "CharacterPlayer.h"
class Warrior: public CharacterPlayer
{
public:
virtual void printCharacterName();
};
#endif
但是,当我尝试实例化Warrior指针或尝试包含“Warrior.h”时,它给了我很多语法错误。
#ifndef CHARACTERPLAYER_H
#define CHARACTERPLAYER_H
#include "Warrior.h"
class CharacterPlayer
{
public:
Warrior *warriorPntr = nullptr;
virtual void printCharacterName();
};
#endif
最佳答案
header 之间具有循环依赖关系:"CharacterPlayer.h"
包括"Warrior.h"
,而"Warrior.h"
包括"CharacterPlayer.h"
。这无法编译,因为“前哨”将停止包含。
诀窍是在Warrior
中向前声明CharacterPlayer
类,而不是包含 header :
#ifndef CHARACTERPLAYER_H
#define CHARACTERPLAYER_H
class Warrior; // <<== Here
class CharacterPlayer
{
public:
Warrior *warriorPntr = nullptr;
virtual void printCharacterName();
};
#endif
这足以声明
Warrior
的指针和引用,但不足以调用方法或实例化该类。您最终需要在cpp文件
Warrior
中包括CharacterPlayer.cpp
的 header ,但这不会导致任何问题,因为 header 之间没有循环依赖关系。