diff --git a/lib/config/configitem.cpp b/lib/config/configitem.cpp index 5dce19eda..f6ec01ab2 100644 --- a/lib/config/configitem.cpp +++ b/lib/config/configitem.cpp @@ -177,7 +177,7 @@ ConfigObject::Ptr ConfigItem::Commit(bool discard) if (IsAbstract()) return nullptr; - ConfigObject::Ptr dobj = static_pointer_cast(type->Instantiate(std::vector())); + ConfigObject::Ptr dobj = dynamic_pointer_cast(type->Instantiate(std::vector())); dobj->SetDebugInfo(m_DebugInfo); dobj->SetZoneName(m_Zone); diff --git a/tools/mkclass/classcompiler.cpp b/tools/mkclass/classcompiler.cpp index 693011369..18a0fcf1c 100644 --- a/tools/mkclass/classcompiler.cpp +++ b/tools/mkclass/classcompiler.cpp @@ -452,8 +452,15 @@ void ClassCompiler::HandleClass(const Klass& klass, const ClassDebugInfo&) /* ObjectImpl */ m_Header << "template<>" << std::endl - << "class ObjectImpl<" << klass.Name << ">" - << " : public " << (klass.Parent.empty() ? "Object" : klass.Parent) << std::endl + << "class ObjectImpl<" << klass.Name << "> : "; + + if (klass.Parent.empty()) { + m_Header << "virtual public Object"; + } else { + m_Header << "public " << klass.Parent; + } + + m_Header << std::endl << "{" << std::endl << "public:" << std::endl << "\t" << "DECLARE_PTR_TYPEDEFS(ObjectImpl<" << klass.Name << ">);" << std::endl << std::endl;