【问题标题】:Comparison operators for directory_entry are missing缺少 directory_entry 的比较运算符
【发布时间】:2011-03-10 12:59:24
【问题描述】:

考虑以下程序:

#include <iostream>
#include "boost/filesystem.hpp"

int main()
{
    boost::filesystem::directory_entry d("test.txt");
    boost::filesystem::directory_entry e("test.txt");

    if (d == e) { // <---- error C2784
        std::cout << "equal" << std::endl;
    }

    return 0;
}

这无法编译(Visual Studio 2005、Windows XP SP3),有 17 种此错误:

error C2784: 'bool std::operator ==(const std::stack<_Ty,_Container> &,
                                    const std::stack<_Ty,_Container> &)' : 
              could not deduce template argument for 
              'const std::stack<_Ty,_Container> &' from 
              'boost::filesystem::directory_entry'

根据documentation(我仍在使用Boost 1.45),有为directory_entry 定义的比较运算符,但我和编译器都找不到它们(我手动检查了标题)。我忽略了什么吗?难道是我在构建 boost 时犯了一个错误,也许是通过设置一些禁用这些运算符的选项?文档有错吗?谁能解释一下?

【问题讨论】:

    标签: c++ boost boost-filesystem


    【解决方案1】:

    如果您无法在头文件中找到运算符,那么您可能有不同版本的库?在 Boost 1.45 中,操作符位于operations.hpp

    【讨论】:

    • 我没有测试,我有一个没有这些操作符的旧版本的库
    【解决方案2】:

    好的,显然这仅在库的新版本中受支持。在程序开始时将BOOST_FILESYSTEM_VERSION 定义为 3 解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-23
      • 2016-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多