2011-03-10 72 views
3

考虑下面的程序:比较运营商directory_entry缺少

#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定义的比较运算符,但我和编译器都没有找到它们(我手动检查了这些头文件)。我可以忽略一些东西吗难道是因为我在建立提升时犯了一个错误,也许是通过设置一些禁用这些运算符的选项?文档是否错误?谁能解释一下?

回答

0

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

0

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

+0

该代码是否为您编译? – 2011-03-10 13:47:47

+0

我没有测试它,我有一个旧版本的库,没有这些运算符 – decltype 2011-03-10 15:13:37