如何处理返回string_type的C ++ boost :: filesystem函数?

时间:2010-11-24 16:09:42

标签: c++ boost

我正在尝试编译以下代码片段:

#include <boost/filesystem/path.hpp>
//Other includes snipped for brevity

boost::filesystem::path inPath("C:\\PathThatDoesNotExist");
std::cout << "Folder \'" << inPath.external_directory_string() 
  << "\' does not exist.";

我收到了这个错误:

  

。\ PathCheck.cpp(31):错误C2679:   二进制'&lt;&lt;' :没有操作员找到哪个   采用类型的右手操作数   “常量   提高:: filesystem3 ::路径:: STRING_TYPE”   (或者没有可接受的转换)

到目前为止,我的研究告诉我,这意味着在编译时不知道类型,我可能需要一个typedef?但我无法在我的头脑或代码中完成这项工作。不推荐使用external_directory_string()函数,所以我也担心这可能是一个因素(我正在用#define BOOST_FILESYSTEM_DEPRECATED处理它)。

有人可以解释string_type并建议如何将其转换为std :: string或char *?我知道还有其他方法可以从目录路径获取此信息,但我还是想了解这个问题。 :)

已解决:我有1.44提升库的v2,但我的标题中有“#define BOOST_FILESYSTEM_VERSION 3”(使用其他版本的同事添加了它)。如果我评论这个指令,我的代码编译正确。看起来我们需要同步我们的库。

2 个答案:

答案 0 :(得分:2)

使用下面的mod,您的代码可以为我编译。这适用于您提到的#define是否适用。

boost::filesystem::path inpath("C:\\PathThatDoesNotExist");
std::cout << "Folder \'" << inpath.external_directory_string() 
    << "\' does not exist.";

什么版本的Boost,以及您使用的是什么编译器?

我正在使用Boost 1.44,Visual C ++ Express 2010. external_directory_string似乎为我返回std::string

编辑: 但是,当我明确设置这样的Boost Filesystem版本时,我收到了您的错误:

#   define BOOST_FILESYSTEM_VERSION 3

我在VS 2010上的默认版本是2,所以我会调查为什么boost/filesystem/path.hpp在你的版本中将其设置为3。

来自Boost docs(1.45):

  

这是Filesystem库的第2版。

     

第3版,是许多人的重大修订版   新的和改进的功能也是   可用,但打破了一些现有的   代码。

听起来对我来说,如果你的构建回到v2,那么你将会更加稳固。

答案 1 :(得分:1)

boost :: filesystem :: path typedefs external_string_type to std :: string(参见这里http://www.boost.org/doc/libs/1_43_0/boost/filesystem/path.hpp),这表明问题出在其他地方?