У меня возникает проблема для получения правильного значения перечисления BaseClass.Значение параметра из класса Derivered, при использовании того же значения из базового класса
class BaseClass
{
public:
enum EntityId {
EN_NONE = 0,
EN_PLAYER = 1,
EN_PLATFORM,
EN_GROUND,
EN_OBSTACLE,
EN_OTHER
};
void setEntityId(EntityId id) { _Entityid = id; }
EntityId getEntityId() { return _Entityid; }
protected:
EntityId _Entityid;
};
и
Инициализация идет как этот
DeriveredClassA->setEntityId(BaseClass::EntityId::EN_PLAYER);
DeriveredClassB->setEntityId(BaseClass::EntityId::EN_OBSTACLE);
который помещается в другой список вектор correspoinding для этого перечисления.
Однако я вынужден использовать void*
делать static_casts
кошки ...
Как это:
BaseClass* EA = static_cast<BaseClass*>(bodyUserDataA); //bodyUserDataA and bodyUserDataB are both void*
BaseClass* EB = static_cast<BaseClass*>(bodyUserDataB);
И я пытаюсь получить с помощью EA->getEntityId()
и EB->getEntityId()
, чтобы я мог проверить, какой из них EN_PLAYER, который является EN_GROUND и т. Д. Таким образом, я мог бы повышать класс от базы до класса с высвобождением и делать с ним другие вещи.
Пробовал использовать с виртуальными, однако каким-то образом я получаю 2 копии _EntityID, которые могут быть либо одинаковыми, либо РАЗНЫМИ между моим Derivered и BaseClass этого одного объекта.
Кроме того, я не могу сразу перевести его в DeriveredClass, так как проверка кода будет огромной из-за множества разных типов DeriveredClass'es (DeriveredClassA, DeriveredClassB, DeriveredClassC, DeriveredClassD) с их соответствующим векторным списком.
Мой вопрос в том, что мне нужна правильная настройка как базового, так и деривативного класса, чтобы я мог получить доступ к _EntityID из Baseclass, который является тем же из этого DeriveredClass? Моя основная проблема может заключаться в том, что я использовал непрямо виртуальные функции, поэтому я оставил по умолчанию, чтобы понять мою проблему.
P.S. Это в основном моя проблема с C++, добавлены другие теги из-за того, что я использую движок игры и физический движок для этого случая.
Возможно, вас заинтересует [dynamic_cast] (http://en.cppreference.com/w/cpp/language/dynamic_cast). Этот бросок предназначен для броска между типами, связанными с наследованием. –
В том-то и дело, я не могу использовать dynamic_casts, дает мне ошибку «операнд указателя dynamic_cast должен быть указателем на полное имя класса» .... – Dinamix
что такое 'EntityInfo'? Мы не знаем, как это связано с BaseClass или DerivedClassA/B. – RyanP