【发布时间】:2023-01-11 12:18:52
【问题描述】:
一年多来,我一直在使用 Boost 的 Bimap 作为库存系统的基础。
typedef boost::bimap<boost::bimaps::set_of<uint32>,
boost::bimaps::multiset_of<uint32>,
boost::bimaps::with_info<FItemDetails>> InventoryBimap;
不过,在从 Unreal 4 更新到 Unreal 5 之后,我做了一些其他更改。我从 Boost 1.68.0 移到了 1.79.0。我从 C++17 转移到 C++20。
编辑:抱歉,我忘了包括我正在使用 Visual Studio 2022。
阻止我的游戏编译的一堆编译错误有两个来源:
1>H:\UnrealEngine\Engine\Source\ThirdParty\boost\boost-1_79_0\include\boost\core\pointer_traits.hpp(120): error C2988: unrecognizable template declaration/definition
1>H:\UnrealEngine\Engine\Source\ThirdParty\boost\boost-1_79_0\include\boost\core\pointer_traits.hpp(127): note: see reference to class template instantiation 'boost::detail::ptr_to_expr<T,E>' being compiled
1>H:\UnrealEngine\Engine\Source\ThirdParty\boost\boost-1_79_0\include\boost\core\pointer_traits.hpp(120): error C2059: syntax error: '<end Parse>'
1>H:\UnrealEngine\Engine\Source\ThirdParty\boost\boost-1_79_0\include\boost\core\pointer_traits.hpp(120): error C2334: unexpected token(s) preceding '{'; skipping apparent function body
1>H:\UnrealEngine\Engine\Source\ThirdParty\boost\boost-1_79_0\include\boost\core\pointer_traits.hpp(120): error C2988: unrecognizable template declaration/definition
1>H:\UnrealEngine\Engine\Source\ThirdParty\boost\boost-1_79_0\include\boost\core\pointer_traits.hpp(120): error C2059: syntax error: '->'
1>H:\UnrealEngine\Engine\Source\ThirdParty\boost\boost-1_79_0\include\boost\core\pointer_traits.hpp(120): error C2238: unexpected token(s) preceding ';'
1>H:\UnrealEngine\Engine\Source\ThirdParty\boost\boost-1_79_0\include\boost\core\pointer_traits.hpp(123): error C2988: unrecognizable template declaration/definition
1>H:\UnrealEngine\Engine\Source\ThirdParty\boost\boost-1_79_0\include\boost\core\pointer_traits.hpp(123): error C2059: syntax error: '<end Parse>'
1>H:\UnrealEngine\Engine\Source\ThirdParty\boost\boost-1_79_0\include\boost\core\pointer_traits.hpp(123): error C2334: unexpected token(s) preceding '{'; skipping apparent function body
然后:
1>H:\UnrealEngine\Engine\Source\ThirdParty\boost\boost-1_79_0\include\boost\core\allocator_access.hpp(397): error C2988: unrecognizable template declaration/definition
1>H:\UnrealEngine\Engine\Source\ThirdParty\boost\boost-1_79_0\include\boost\core\allocator_access.hpp(407): note: see reference to class template instantiation 'boost::detail::alloc_has_allocate<A>' being compiled
1>H:\UnrealEngine\Engine\Source\ThirdParty\boost\boost-1_79_0\include\boost\core\allocator_access.hpp(397): error C2059: syntax error: '<end Parse>'
1>H:\UnrealEngine\Engine\Source\ThirdParty\boost\boost-1_79_0\include\boost\core\allocator_access.hpp(397): error C2334: unexpected token(s) preceding '{'; skipping apparent function body
1>H:\UnrealEngine\Engine\Source\ThirdParty\boost\boost-1_79_0\include\boost\core\allocator_access.hpp(398): error C2988: unrecognizable template declaration/definition
1>H:\UnrealEngine\Engine\Source\ThirdParty\boost\boost-1_79_0\include\boost\core\allocator_access.hpp(398): error C2059: syntax error: '->'
1>H:\UnrealEngine\Engine\Source\ThirdParty\boost\boost-1_79_0\include\boost\core\allocator_access.hpp(400): error C2238: unexpected token(s) preceding ';'
对于 allocator_access.hpp 中的每个模板,都会重复第二个错误。
到目前为止,我发现的唯一短期修复方法是注释掉我项目中包含的所有 bimap。
我目前不确定如何进行,希望有人对可能发生的事情有所了解。
【问题讨论】:
标签: c++ boost unreal-engine5