我正在使用的库使用boost depth_first_search.hpp。当我尝试编译时,我收到一条很长的错误消息:
Error C2664 'boost::type_traits::no_type boost::detail::has_member_function_finish_edge_detail_hcmf<BOOST_TTI_DETAIL_TP_T>::chkt<has_member_function_finish_edge_detail_hcmf<BOOST_TTI_DETAIL_TP_T>::cl_type<BOOST_TTI_DETAIL_TP_T>::type>(...)': cannot convert argument 1 from 'nullptr' to '...'
错误消息指向此行:
BOOST_TTI_HAS_MEMBER_FUNCTION(finish_edge)
在depth_first_search.hpp中。这通过几个预处理器宏解析为一些非常长的函数,显然是为了检查是否存在一个名为finish_edge的函数。
我尝试过一些不同的东西来让它发挥作用并找出问题所在。我发现只有在使用/ CLR标志编译时才会发生错误。我已经设置了一个空项目,其中main.cpp中唯一的东西是#include <boost/graph/depth_first_search.hpp>
和一个空主。如果我使用/ CLR编译项目,则存在问题,但是如果删除/ CLR,则编译正常。
问题是我需要clr支持,因为我正在编写一组用于C#的包装器。我尝试将depth_first_search.hpp编译为不受管理的here,但它不起作用。
另外我发现我可以注释掉这个功能,它似乎工作得很好,但是我想在没有这样做的情况下工作。
如何使用C ++ CLI获得提升?
编辑:我创建了一个SSCCE here。显然应该更新项目属性,以便额外的include目录是要提升的点。
这是主文件:
#include <boost/graph/depth_first_search.hpp>
using namespace System;
int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Hello World");
return 0;
}
答案 0 :(得分:0)
我现在找到了解决方法。
注释掉BOOST_TTI_HAS_MEMBER_FUNCTION(finish_edge)行时 并更换线 do_call_finish_edge
它对我有用......