【发布时间】:2015-10-28 13:07:57
【问题描述】:
我正在使用的库使用 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> 和一个空的 main。如果我用 /CLR 编译项目,问题就在那里,但如果删除 /CLR,它编译得很好。
问题是我需要 clr 支持,因为我正在编写一组用于 C# 的包装器。我尝试按照here 的描述将 depth_first_search.hpp 编译为非托管,但没有成功。
此外,我发现我可以注释掉这个函数,而且它看起来工作正常,但我想在不做这样的黑客的情况下工作。
如何获得提升以更好地使用 C++CLI?
编辑:我创建了一个 SSCCE here。项目属性显然应该更新,以便额外的包含目录是提升的点。
这是主文件:
#include <boost/graph/depth_first_search.hpp>
using namespace System;
int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Hello World");
return 0;
}
【问题讨论】:
-
嗯,C++/CLI 是基于旧版本的 C++,从那以后就很少有人喜欢了。所以,事情一定会很困难。
-
“我尝试将 ... 编译为非托管 ...,但没有成功。”与“我如何获得提升以更好地使用 C++CLI?”。在我看来,你在吠叫错误的树。做一个SSCCE我来修(最好是非托管版本)
-
@Deduplicator BGL 完全是 c++03 证明
-
@sehe:嗯,这使得将 boost 库编译为 C++/CLI 不太可能成为问题。感谢您提供的信息。
-
我正在整理一个 SSCCE,稍后会放上去。 @Deduplicator。为什么要删除 C++ 标签。这是关于 C++-cli 和常规 C++ 之间的互操作。当然这两个标签都适用。
标签: .net boost c++-cli interop visual-studio-2015