1

Visual C++ 2008 Express Edition でこのコードを試しましたが、コンパイルされません。

#include <iostream>
#include <vector>
#include <algorithm>

int main()
{
    typedef std::string Element;
    typedef std::vector< Element > Vector;
    typedef Vector::iterator Iterator;

    Vector v;
    std::find( v.begin(), v.end(), std::string( "xxx" ) );

    return 0;
}

次のエラーが表示されます。

c:\programmi\microsoft visual studio 9.0\vc\include\algorithm(40) : error C2784: 'bool  std::operator ==(const std::vector<_Ty,_Alloc> &,const std::vector<_Ty,_Alloc> &)' : could not deduce template argument for 'const std::vector<_Ty,_Alloc> &' from 'std::basic_string<_Elem,_Traits,_Ax>'

同じコードが gcc によってコンパイルされて修正され、期待どおりに動作します。

Visual Studio のバグですか?私の例を Visual C++ 2008 で動作させるにはどうすればよいですか?

4

1 に答える 1

8

あなたはするのを忘れました#include <string>

コードに必要なすべてのヘッダーを常に含める必要があります。たまたま機能する魔法の再帰的インクルージョンに依存しないでください。コードで使用するすべてのものについて、コードが宣言されている場所を把握し、宣言が変換ユニットに表示されることを保証する必要があります。

于 2012-10-23T12:42:06.523 に答える