【问题标题】:How to handle C++ boost::filesystem functions that return string_type?如何处理返回 string_type 的 C++ boost::filesystem 函数?
【发布时间】:2010-11-24 16:09:42
【问题描述】:

我正在尝试编译以下 sn-p 代码:

#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: 二进制 '

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

有人可以解释 string_type 并推荐如何将它变成 std​​::string 或 char* 吗?我知道还有其他方法可以从目录路径中获取此信息,但我还是想了解这个问题。 :)

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

【问题讨论】:

  • 代码中的声明(inPath)中是否缺少变量名?
  • 你是对的,谢谢。我编辑了。

标签: c++ boost


【解决方案1】:

使用下面的模块,您的代码可以为我编译。无论有没有你提到的#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 文档 (1.45):

这是文件系统库的第 2 版。

第 3 版,一个重大修订版,包含许多 新的和改进的功能也是 可用,但会破坏一些现有的 代码。

在我看来,如果您将构建恢复到 v2,您的基础就会更加稳固。

【讨论】:

  • 我也在 Boost 1.44 上,使用 Visual Studio Team System 2008(开发版)。
  • @Ennael - 这很奇怪。也许您可以将代码更新为实际失败的版本。如前所述,发布的 sn-p 中有语法错误。
  • 谢谢,我将 inPath 声明输入为本地声明时出错(我的原始声明是该类的成员)。我修复了这个问题,以及我的转义字符和剪切粘贴编译,以进行验证。我仍然遇到同样的错误。奇怪的是你不会在同一个版本上......会做一些其他的检查,看看有什么不同。
  • 值得注意的是,在我的例子中,命名空间是filesystem2,而不是filesystem3(请参阅您的警告错误)。您是否明确要求第 3 版?
  • 就是这样。您编辑中的#define 在我的头文件中。我认为我的同事必须使用不同版本的 boost,所以我想这是我们需要解决的问题。谢谢!
【解决方案2】:

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
  • 2016-06-02
  • 1970-01-01
相关资源
最近更新 更多