2011-03-10 64 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