我的项目中的两个类StatusEffect
和BaseCharacter
之间具有循环冗余循环依赖关系。
这两个类需要彼此了解,因为BaseCharacter
需要存储一组StatusEffect
,并且StatusEffect
需要能够对BaseCharacter
进行操作。我认为不可能消除这种现象,但仍然可以使其正常工作。这是我现在正在尝试做的事情:
基本字符存在于命名空间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;
};
}
}
但是,这给了我一个编译器错误:
我以为,因为我使用的是指针,所以此前向声明很好。我还需要转发声明吗?我不需要向前声明整个类的定义吗?
最佳答案
您不能通过指向前向声明的类的指针来调用方法。您必须将此代码移动到已经定义了类的某个位置,例如,将其移到同时包含两个类定义的.cpp文件中。