gpt4 book ai didi

c++ - 前向申报问题

转载 作者:太空狗 更新时间:2023-10-29 19:49:52 26 4
gpt4 key购买 nike

我的项目中的两个类StatusEffectBaseCharacter 之间存在 循环冗余 循环依赖。

两个类都需要知道彼此,因为 BaseCharacter 需要存储一组 StatusEffect 并且 StatusEffect 需要能够对 BaseCharacter 进行操作。我不认为有可能消除这种行为并且仍然可以正常工作。这是我现在正在尝试做的事情:

Base Character 存在于命名空间 Game::Character 中,StatusEffect 存在于命名空间 Game::StatusEffects

在 StatusEffects.h 中,我像这样转发声明 BaseCharacter:

namespace Game {
namespace Character {
class BaseCharacter;
}
}

然后在它下面我有:

namespace Game
{
namespace StatusEffects
{
class StatusEffect
{
public:
virtual void TickCharacter(Game::Character::BaseCharacter* character, int ticks = 1)
{
std::cout << "Name " << character->GetName() << std::endl;
}
protected:
private:
std::string name;
int StatusEffectUID;
};
}
}

但是,这给了我一个编译器错误:

Error 1 error C2027: use of undefined type 'Game::Character::BaseCharacter'

我认为因为我使用的是指针,所以这个前向声明没问题。还有什么我需要转发申报的吗?我不需要转发声明整个类定义吗?

最佳答案

您不能通过指向前向声明类的指针来调用方法。您必须将此代码移动到已定义类的位置 - 例如,移动到包含两个类定义的 .cpp 文件中。

关于c++ - 前向申报问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5777018/

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