例如。我们有class A
及其派生类;class B
。是否可以实例化B
in类型的指针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
标头之间具有循环依赖关系:"CharacterPlayer.h"
include"Warrior.h"
和"Warrior.h"
include "CharacterPlayer.h"
。这无法编译,因为“前哨”将停止包含。
诀窍是在中向前声明Warrior
该类,CharacterPlayer
而不是包含标头:
#ifndef CHARACTERPLAYER_H
#define CHARACTERPLAYER_H
class Warrior; // <<== Here
class CharacterPlayer
{
public:
Warrior *warriorPntr = nullptr;
virtual void printCharacterName();
};
#endif
这足以声明的指针和引用Warrior
,但不足以调用方法或实例化该类。
您最终需要Warrior
在cpp文件中包含标头CharacterPlayer.cpp
,但这不会导致任何问题,因为标头之间没有循环依赖关系。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句