2017-12-05 3 views
-4

우선, 비슷한 구조의 게임 엔진을 Unity에 만들려고합니다. Object 클래스에서 Object 클래스를 상속받습니다. GameObject 클래스 내에서 당신이 게임 개체에 어떤 구성 요소를 추가 할 수있게 해주는 템플릿 클래스를 만들려고합니다.하지만 동적 포인터 캐스팅 오류가 발생해도 해결할 수없는 것 같습니다.GAME ENGINE : dynamic_cast - 객체 클래스가 다형성 유형이 아닙니다.

Heres는 게임 오브젝트 클래스 : 오류는 가상이없는에서 전송하려고하는 어떤 것을 의미

class Object : public std::enable_shared_from_this<Object> 
{ 

friend class GameObject; 

public: 
Object(); 
~Object(); 


void makeName(std::string _name); 

std::string getName(); 

private: 
std::string name; 


}; 

답변

0

:

class GameObject : public Object 

{ 

public: 

template<class T> 
std::shared_ptr<T> addChildComponent() 
{ 
    std::shared_ptr<T> temp_component(new T()); 

    temp_component->gameObject = std::dynamic_pointer_cast<GameObject>(shared_from_this()); 
    m_components.push_back(temp_component); 

    return temp_component; 
} 

template<class T> 
std::shared_ptr<T> getComponent() 
{ 
    for (int i = 0; i < m_components.size(); i++) 
    { 
     std::shared_ptr<T> t; 
     t = m_components.at(i); 

     if (t.get() != NULL) 
     { 
      return t; 
     } 
    } 

    return std::shared_ptr<T>(); 

} 

은 또한이는 상속 객체 클래스입니다 회원. 가상 상속 체인의 기본 클래스에는 최소한 가상 소멸자가 있어야하며 더 이상이 오류가 발생하지 않습니다. 예를 들어

가 오류를 나타낼 것이다 다음은 당신이 :

class base1 
{ 
int a; 
}; 
class derived1: public base1 
{}; 
... 
derived1 d1; 
base1 * pb1 =&d1; 
derived1 * pd1 = dynamic_cast<derived1*>(pb1); 

동안 다음은 않을 것 :

class base2 
{ 
int a; 
public: 
virtual ~base1() {} 
}; 
class derived2 : public base2 
{}; 
... 
derived2 d2; 
base2 * pb2 = &d2; 
derived2 * pd2 = dynamic_cast<derived2*>(pb2); 
관련 문제