gpt4 book ai didi

c++ - 派生类在基类中的组合

转载 作者:行者123 更新时间:2023-11-30 05:47:15 25 4
gpt4 key购买 nike

例如。我们有 class A 及其派生类; B 类。是否可以在 class A 中实例化 B 类型的指针?

#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”。这无法编译,因为“哨兵”将停止包含。

诀窍是在 CharacterPlayer 中转发声明 Warrior 类,而不是包含标题:

#ifndef CHARACTERPLAYER_H
#define CHARACTERPLAYER_H
class Warrior; // <<== Here
class CharacterPlayer
{
public:
Warrior *warriorPntr = nullptr;
virtual void printCharacterName();

};
#endif

这足以声明指向 Warrior 的指针和引用,但不足以调用方法或实例化类。

您最终需要在 cpp 文件 CharacterPlayer.cpp 中包含 Warrior 的 header ,但这不会导致任何问题,因为它们之间没有循环依赖你的标题。

关于c++ - 派生类在基类中的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28643372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com