例如。我们有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 之间没有循环依赖关系。

10-04 21:03