3

次のプログラムを検討してください。

#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;
}

これは、このエラーの 17 のバリエーションでコンパイルに失敗します (Visual Studio 2005、Windows XP SP3)。

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'

ドキュメント(私はまだBoost 1.45を使用しています)によると、に対して定義された比較演算子がありますdirectory_entryが、私もコンパイラもそれらを見つけることができません(ヘッダーを手動でチェックしました)。私は何かを見落としていますか?これらのオペレーターを無効にするオプションを設定することで、ブーストを構築するときに間違いを犯した可能性がありますか? ドキュメントは間違っていますか?誰でも説明できますか?

4

2 に答える 2

0

ヘッダーファイルで演算子を見つけることができなかった場合は、ライブラリのバージョンが異なる可能性がありますか?Boost 1.45では、オペレーターはoperations.hppにあります。

于 2011-03-10T13:40:25.613 に答える
0

どうやら、これはライブラリの新しいバージョンでのみサポートされているようです。プログラムの開始時に 3 として定義するBOOST_FILESYSTEM_VERSIONと、問題が修正されました。

于 2011-03-10T14:47:20.373 に答える