1

此代码无法编译,使用 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 下它编译。我怎样才能解决这个问题?

4

1 回答 1

1

您的第二个论点 ( boost::filesystem::native) 是错误的。boost::filesystem::path根本没有构造函数来接受这个参数——把它关掉,代码就可以编译了。

事实上,boost::filesystem::native是一个函数,以你尝试的方式使用它是没有意义的。此外,如果 MSVC 编译此代码,这是一个明确的错误(它使用从函数指针到 的隐式转换,void*根据标准不存在)。

于 2012-07-09T15:26:58.420 回答