游戏引擎:Dynamic_cast-对象类不是多态类型
GAME ENGINE : dynamic_cast - Object class is not a polymorphic type
首先,我试图创建具有与Unity相似的架构的游戏引擎。我有一个对象类,一个从对象继承的游戏对象类。在GameObject类中,我正在尝试完成一个模板类,该类将使您在游戏对象上添加任何组件,尽管我得到了一个动态的指针铸造错误,我似乎无法解决。
HER是GameObject类:
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 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;
};
错误意味着您试图从中施放的任何东西都没有任何虚拟成员。虚拟继承链的基类应始终具有至少一个虚拟破坏者,然后您将不再遇到此错误。
作为一个例子,以下内容将显示您遇到的错误:
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);
相关文章:
- 对于多态类型T,如何在没有类型T实例的情况下获得指向T的虚拟表的指针
- 哈希多态类型的正确方式
- C++ 2D shared_ptr数组使用抽象多态类型初始化
- 一个类似 std::访问的函数,用于访问多态类型
- 将unique_ptr返回到多态类型
- 为什么删除的复制构造函数不允许使用其他具有多态类型的构造函数?
- Sean Parent:对于继承层次结构中的多态类型,具有可变对象是极端的例外
- 通过指向非多态类型的基类的指针获取已分配内存的地址
- 如何在代码块 IDE 上修复此警告,警告:按值 [-Wcatch-value=] 捕获多态类型"类 std::d omain_error"
- 不是多态类型,或者为什么我们在这里需要虚拟析构函数?
- 游戏引擎:Dynamic_cast-对象类不是多态类型
- 使用decltype的动态多态类型演绎
- 编译器如何知道为多态类型选择哪个函数
- 多态类型的连续存储
- 如何在gSOAP中绑定多态类型
- 防止谷物写入多态类型数据
- C++传递函数作为具有多态类型的参数
- 返回不带动态内存分配的多态类型
- 符合标准的编译器是否可以拒绝包含非多态类型向下转换dynamic_cast代码
- 在循环中使用无变量多态类型进行优化