我正在尝试编译以下代码片段:
#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”(使用其他版本的同事添加了它)。如果我评论这个指令,我的代码编译正确。看起来我们需要同步我们的库。
答案 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),这表明问题出在其他地方?