我一直在使用boost序列化,我开发了一个整个模块来存储持久存储中的类,但是当我尝试将模块迁移到其他项目时,我遇到了一些我从未见过的错误,我没有发现任何相关的网上的信息。
我得到的错误是:
In file included from support.../boost_1_44/boost/serialization/void_cast.hpp:29,
from support.../boost_1_44/boost/archive/detail/oserializer.hpp:57,
from support.../boost_1_44/boost/archive/detail/interface_oarchive.hpp:23,
from support.../boost_1_44/boost/archive/detail/common_oarchive.hpp:22,
from support.../boost_1_44/boost/archive/basic_binary_oarchive.hpp:34,
from support.../boost_1_44/boost/archive/binary_oarchive_impl.hpp:23,
from support.../boost_1_44/boost/archive/binary_oarchive.hpp:21,
from .../ps_proxy.h:54,
support.../boost_1_44/boost/type_traits/is_virtual_base_of.hpp:57:10: error: macro "X" requires 2 arguments, but only 1 given
support.../boost_1_44/boost/type_traits/is_virtual_base_of.hpp:58:18: error: macro "X" requires 2 arguments, but only 1 given
support.../boost_1_44/boost/type_traits/is_virtual_base_of.hpp:60:11: error: macro "X" requires 2 arguments, but only 1 given
support.../boost_1_44/boost/type_traits/is_virtual_base_of.hpp:57: error: declaration does not declare anything
support.../boost_1_44/boost/type_traits/is_virtual_base_of.hpp:58: error: declaration does not declare anything
support.../boost_1_44/boost/type_traits/is_virtual_base_of.hpp:60: error: declaration of '~boost::detail::is_virtual_base_of_impl<Base, Derived, mpl_::bool_<true> >::X' as non-function
support.../boost_1_44/boost/type_traits/is_virtual_base_of.hpp:60: error: expected ';' before 'throw'
我希望有人可以给我一些关于为什么会发生这种情况的提示以及为什么它在一个模块上正常工作,当我迁移它时(应该是透明的迁移)它会抛出这些错误。
谢谢!
答案 0 :(得分:2)
boost::is_virtual_base_of<>
用于Boost.Serialization的实现。boost::is_virtual_base_of<>
使用了名为X
和Y
的类型作为实施细节。X
的宏已定义,违反了X
实施中使用的boost::is_virtual_base_of<>
类型。显然X
是一个可怕的宏名称 - 如果它是你的,那么找到一个更好的名字,如果不是,那么通过电子邮件发送任何图书馆的作者定义它并投诉(然后#undef
之前包括任何Boost标题)。
FWIW,这显然是一个常见的问题,在Boost 1.47类型中使用了名为boost_type_traits_internal_struct_X
和boost_type_traits_internal_struct_Y
而不是X
和Y
,所以升级到更多当前版本的Boost是解决症状的另一种方法。