我为学校项目编写了一个简短的模板方法,并且我得到了一些我不理解的奇怪的语法错误。它们与我声明的模板有关(当注释掉包含模板的标题时,main()中的所有错误都会消失)但我无法弄清楚发生了什么。我包括和" intersectHeader.h"并使用std命名空间。 在我的main()函数中,我所做的只是声明一个向量:
vector v1; - 错误:C2065' string'未声明的标识符, C2065' v1'未声明的标识符,C2065' vector'未声明的标识符
这是模板:
template<typename T>
vector<T> intersect(const vector<T> & v1, const vector<T> & v2)
{
vector<T> resultVector;
bool duplicate = false;
for (int i = 0; i < v1.size(); i++)
{
duplicate = false;
for (int j = 0; j < v2.size(); j++)
{
if (v1[i] == v2[j])
{
for (int a = 0; a < resultVector.size(); a++)
{
if (v1[i] == resultVector[a])
{
duplicate = true;
break;
}
}
if (!duplicate)
{
resultVector.push_back(v1[i]);
}
}
}
}
return resultVector;
}
上面给出了这些错误:
C2988无法识别的模板声明/定义,C2143语法 错误缺失&#39;;&#39;之前&#39;&lt;&#;;,C2059语法错误&#39;&lt;&#39;。
所有这些都出现在第二行&#34;向量相交(const向量&amp; v1, 常数矢量&amp; V2)&#34;
答案 0 :(得分:1)
您不应该在任何头文件中执行using namespace std
。您应该将明确的std::
命名空间添加到模板实现中,问题应该消失(假设您已包含相应的标准库标题)。