У меня циклическая избыточность циклическая зависимость между двумя классами в моем проекте, 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;
};
}
}
Однако, это дает мне ошибку компилятора:
Ошибка 1 ошибка C2027: использование неопределенного типа 'Game :: Character :: BaseCharacter'
Я подумал, что, поскольку я использую указатель, это прямое объявление в порядке.Есть ли что-то еще, что мне нужно переслать объявить?Мне не нужно заранее объявлять все определение класса, не так ли?