此代码无法使用Boost 1.48和GCC进行编译:
// const char* left, const char* right
boost::filesystem::path p = boost::filesystem::absolute(
boost::filesystem::path(right, boost::filesystem::native), // line 314
boost::filesystem::path(left, boost::filesystem::native) ); // line 315
错误讯息:
LoggerImplementation.cpp|314|error: invalid conversion from ‘bool (*)(const std::string&)’ to ‘void*’
LoggerImplementation.cpp|314|error: initializing argument 2 of ‘boost::filesystem3::path::path(const Source&, typename boost::enable_if<boost::filesystem3::path_traits::is_pathable<typename boost::decay<Source>::type>, void>::type*) [with Source = const char*]’
LoggerImplementation.cpp|315|error: invalid conversion from ‘bool (*)(const std::string&)’ to ‘void*’
LoggerImplementation.cpp|315|error: initializing argument 2 of ‘boost::filesystem3::path::path(const Source&, typename boost::enable_if<boost::filesystem3::path_traits::is_pathable<typename boost::decay<Source>::type>, void>::type*) [with Source = const char*]’
在MSVC下编译。我该如何解决这个问题?
答案 0 :(得分:1)
你的第二个论点(boost::filesystem::native
)是错误的。 <{1}}只需doesn’t have a constructor即可获取此参数 - 将其关闭并编译代码。
事实上,boost::filesystem::path
是一个函数,并且以您尝试的方式使用它是没有意义的。此外,如果MSVC编译此代码,那么这是一个明确的错误(它使用从函数指针到boost::filesystem::native
的隐式转换,根据标准不存在)。