使用/ clr编译时,使用boost depth_first_search.hpp时出现C2664错误

时间:2015-10-28 13:07:57

标签: .net boost c++-cli interop visual-studio-2015

我正在使用的库使用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;
}

1 个答案:

答案 0 :(得分:0)

我现在找到了解决方法。

注释掉BOOST_TTI_HAS_MEMBER_FUNCTION(finish_edge)行时 并更换线 do_call_finish_edge

它对我有用......