Увеличьте ошибку компиляции is_virtual_base_of при переносе рабочего модуля. - PullRequest
1 голос
/ 05 октября 2011

Я работал с расширенной сериализацией, я разработал целый модуль для хранения классов в постоянном хранилище, но когда я пытаюсь перенести мой модуль в другой проект, у меня появляются некоторые ошибки, которых я никогда не видел, и я не нашел связанных с ними информация в сети.

Я получаю ошибку:

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'

Я надеюсь, что кто-то может дать мне несколько советов относительно того, почему это могло произойти и почему оно работает правильно на одном модуле, и когда я переносил его (предполагается, что это прозрачная миграция), он выдает эти ошибки.

Спасибо!

1 Ответ

2 голосов
/ 05 октября 2011
  1. boost::is_virtual_base_of<> используется где-то в реализации Boost.Serialization.
  2. В Boost 1.44 boost::is_virtual_base_of<> использует типы с именами X и Y в качестве подробностей реализации.
  3. Где-то в вашем другом проекте есть макрос с именем X, определяющий тип X, используемый в реализации boost::is_virtual_base_of<>.

Очевидно, X ужасный макросname - если оно ваше, найдите более подходящее имя, а если его нет, отправьте электронное письмо автору библиотеки, которая его определила, и пожалуйтесь (затем #undef перед включением любых заголовков Boost).

FWIW, этоПо-видимому, это была достаточно распространенная проблема: в Boost 1.47 вместо X и Y используются типы с именами boost_type_traits_internal_struct_X и boost_type_traits_internal_struct_Y, поэтому обновление до более новой версии Boost - это еще один способ обойти симптомы.

...