C++ 在何处声明用于序列化的BOOST_类_导出

C++ 在何处声明用于序列化的BOOST_类_导出,c++,c++11,serialization,boost,C++,C++11,Serialization,Boost,我想序列化我的数据,我有多态类 最初,在学习序列化过程时,我在头文件中声明了继承的类 Header file for Sphere which is sub class of geometry BOOST_CLASS_EXPORT(Sphere) 但是当我尝试在我的项目中执行时,我得到了链接器error2005,说明对象已经在对象中定义 因此,我尝试在cpp文件中声明BOOST_类_导出(Sphere),但收到错误消息“派生类未注册或导出” 最终,我通过在主文件中声明派生类使它工作起来

我想序列化我的数据,我有多态类

最初,在学习序列化过程时,我在头文件中声明了继承的类

  Header file for Sphere which is sub class of geometry
  BOOST_CLASS_EXPORT(Sphere)
但是当我尝试在我的项目中执行时,我得到了链接器error2005,说明对象已经在对象中定义

因此,我尝试在cpp文件中声明BOOST_类_导出(Sphere),但收到错误消息“派生类未注册或导出”

最终,我通过在主文件中声明派生类使它工作起来

  BOOST_CLASS_EXPORT_GUID(Sphere, "Sphere"); 
但这里的问题是,如果我有30个对象,我需要在主文件中声明它们,如果我添加任何新类,我需要在主文件中再次声明它们


我可以在类的头文件或cpp文件中定义导出。

您想将导出键和实现分开

我有一些非常完整的答案,其中一些还涉及多态性和抽象基础。请参见此处,以获取好的建议:

  • 最简单的介绍(没有代码,但可能是最具说明性的)
  • 包含更多解释和文档引用的完整示例,采用多个翻译单元:
  • (包含多个源文件和makefile)
  • 另一个具有多个翻译单元的示例
  • 混合静态多态性和动态多态性的微妙陷阱:
  • 火箭科学黑客:

您希望将导出密钥和实现分开

我有一些非常完整的答案,其中一些还涉及多态性和抽象基础。请参见此处,以获取好的建议:

  • 最简单的介绍(没有代码,但可能是最具说明性的)
  • 包含更多解释和文档引用的完整示例,采用多个翻译单元:
  • (包含多个源文件和makefile)
  • 另一个具有多个翻译单元的示例
  • 混合静态多态性和动态多态性的微妙陷阱:
  • 火箭科学黑客: