缺少directory_entry的比较运算符

时间:2011-03-10 12:59:24

标签: c++ boost boost-filesystem

考虑以下计划:

#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时犯了一个错误,可能是通过设置一些禁用这些运算符的选项?文档错了吗?谁能解释一下?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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