1

我在 Visual C++ 2008 速成版上尝试了此代码,但无法编译:

#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 回答