1

このコードは、Boost1.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

2番目の引数(boost::filesystem::native)が間違っています。この引数を取るコンストラクターがないboost::filesystem::pathだけです。そのままにしておくと、コードがコンパイルされます。

実際、これboost::filesystem::native関数であり、試した方法で使用しても意味がありません。さらに、MSVCがこのコードをコンパイルする場合、それは決定的なバグです(関数ポインターから、への暗黙の変換を使用していますがvoid*、これは標準では存在しません)。

于 2012-07-09T15:26:58.420 に答える