BaseClass 올바른 enum 값을 검색하는 데 문제가 있습니다. 기본 클래스에서 동일한 값에 액세스하면서 Derived 클래스의 값 설정
class DeriveredClassA : public SomeClass, public BaseClass {....};
class DeriveredClassB : public SomeClass, public BaseClass {....};
초기화
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;
};
및
는 ENUM correspoinding에 다른 벡터리스트에 배치되어이DeriveredClassA->setEntityId(BaseClass::EntityId::EN_PLAYER);
DeriveredClassB->setEntityId(BaseClass::EntityId::EN_OBSTACLE);
같이 진행한다.
그러나, 나는 static_casts
고양이 ...이처럼
할 void*
를 사용하도록 강요하고 있습니다 :
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_PLAYER, EN_GROUND 등)입니다. 그러면 기본 클래스에서 deriver 클래스로 상향 클래스 할 수 있고 다른 클래스도 사용할 수 있습니다.
가상을 사용하여 시도했지만 어떻게 든 _EntityID의 사본 2 개를받습니다.이 사본은 동일하거나 다른 하나의 객체 인 Derivered와 BaseClass간에 다를 수 있습니다.
또한 DerivedClass'es (DeriveredClassA, DeriveredClassB, DeriveredClassC, DeriveredClassD)가 해당 벡터 목록과 함께 여러 가지 유형으로 인해 코드 검사가 거대하기 때문에 곧바로 DeriveredClass로 캐스팅 할 수 없습니다.
내 질문은 내가 DeriveredClass와 동일한 Baseclass에서 _EntityID에 액세스 할 수 있도록 Base와 Derived 클래스를 올바르게 설치해야하는 까닭입니다. 내 주요 문제는 incorectly 가상 함수를 사용하는 것이므로 기본적으로 내 문제를 이해할 수 있도록 남겨 두었습니다.
P. 이것은 주로 내 C++ 문제이며, 다른 태그는이 경우 게임 엔진과 물리 엔진을 사용하기 때문에 추가됩니다.
class Entity
{
public:
enum Type {
EN_NONE = 0,
EN_PLAYER = 1,
EN_PLATFORM,
EN_GROUND,
EN_OBSTACLE,
EN_OTHER
};
Type getType() { return _type; }
protected:
Entity(Type type): _type(type) {}
private:
const Type _type;
};
을 다음 파생 클래스와이 기본의 사용을 더 같이 될 것이다 :
class PlayerEntity: public Entity, public SomeClass
{
public:
PlayerEntity(std::string name): Entity(EN_PLAYER), _name(name) {}
std::string getName() const { return _name; }
private:
std::string _name;
};
class PlatformEntity: public Entity, public SomeClass
{
public:
PlatformEntity(): Entity(EN_PLATFORM) {}
};
초기화는 다음과 같이 이루어집니다
[dynamic_cast] (http://en.cppreference.com/w/cpp/language/dynamic_cast)에 관심이있을 수 있습니다. 이 형변환은 상속에 의해 관련된 형간에 캐스트하도록 설계되었습니다. –
그게 포인트 야, 나는 dynamic_casts를 사용할 수 없다. "포인터의 피연산자 dynamic_cast는 완전한 클래스 이름에 대한 포인터 여야한다."라는 오류를 준다. – Dinamix
무엇이'EntityInfo'인가? 우리는 그것이 BaseClass 또는 DerivedClassA/B와 어떻게 관련이 있는지 알지 못합니다. – RyanP