我在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上运行?
答案 0 :(得分:8)
你忘了#include <string>
。
您必须始终包含代码所需的所有标头。永远不要依赖偶尔会发生的魔术递归包含。对于您在代码中使用的所有内容,您必须知道它的声明位置,并保证声明在翻译单元中可见。