我的项目中的两个类StatusEffectBaseCharacter之间具有循环冗余循环依赖关系。

这两个类需要彼此了解,因为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文件中。

09-04 18:17