模板方法中的语法错误,我不明白

时间:2016-04-28 06:18:29

标签: c++ templates vector syntax compiler-errors

我为学校项目编写了一个简短的模板方法,并且我得到了一些我不理解的奇怪的语法错误。它们与我声明的模板有关(当注释掉包含模板的标题时,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;

1 个答案:

答案 0 :(得分:1)

您不应该在任何头文件中执行using namespace std。您应该将明确的std::命名空间添加到模板实现中,问题应该消失(假设您已包含相应的标准库标题)。