Какой смысл декларации class Component;
, если вы все равно включите Component.h
?Вы не можете унаследовать от неполного типа, поэтому это объявление не имеет смысла.
Дикая догадка состоит в том, что круговые проблемы включают в себя, но действительно трудно сказать без дополнительной информации.Я рекомендую прочитать эту статью на Организация файлов кодов на C и C ++ , если вы не знаете предмета.
Редактировать:
Player.addComponent(StaticSprite, new StaticSprite());
Нельзя передать тип StaticSprite
методу.Это, вероятно, источник ошибки.Покажите нам декларацию addComponent
.Каков первый тип параметра?
Редактировать:
void Entity::addComponent(TYPE type, void* component)
Хорошо, так каково определение TYPE
?Я думаю, это просто typedef для int
или что-то?В этом случае должно быть ясно, что вы не можете назначить тип StaticSprite
для int
.
Редактировать:
enum TYPE{Base = 0, StaticSprite, DynamicSprite,
Physics, Collision, Input, Particle, Audio, Scriptable, MaxType};
Да, там у вас естьЭто.Перечислитель TYPE::StaticSprite
не имеет абсолютно никакого отношения к типу StaticSprite
, даже если они имеют одно и то же имя.Присвойте перечислителю другое имя, например T_StaticSprite
, и следующий код должен работать:
Player.addComponent(T_StaticSprite, new StaticSprite());
(Является ли эта вещь перечисления всего типа хорошей идеей, это другой вопрос.)