2016-04-28 101 views
0

我写了一个学校项目的简短模板方法,并得到我不明白的奇怪的语法错误。他们与我声明的模板有关(在注释包含模板的头文件时,main()中的所有错误消失),但我无法弄清楚发生了什么。我包含和“intersectHeader.h”并使用std命名空间。 在我的main()函数中,我所做的全部是声明一个向量:模板方法中的语法错误,我不明白

vector v1; - 错误:C2065 '串' 未声明的标识符, C2065 'V1' 未声明的标识符,C2065 '向量' 未声明的标识符

这是模板:

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语法 错误缺少';'在'<'之前,C2059语法错误'<'。所有这一切都发生在第二行

“矢量相交(常量向量& V1, const的载体& V2)”

+0

我不知道为什么在<>未示出的代码,但所述声明是:模板 矢量相交(常量矢量&V1,常量矢量&V2)和可变矢量 resultVector; – Rick

+2

请将完整的错误输出复制粘贴到问题的正文中,使用代码格式,以便显示所有字符。还请指出(例如评论)代码中错误的位置。如果可能的话,请尝试创建一个[最小化,完整和可验证示例](http://stackoverflow.com/help/mcve),您可以向我们显示。 –

+0

至少显示所有包含和“使用命名空间”的东西。或者更好的是,删除所有的使用指令,并用相应的限定符为相关名称加前缀。 – Mat

回答

1

你不应该做任何的头文件using namespace std。您应该将明确的std::名称空间添加到您的模板实现中,并且问题应该消失(假定您已包含适当的标准库标头)。

+0

解决了它,非常感谢! – Rick

+0

@瑞克:不客气。请点击左侧的复选标记,考虑“接受”这个答案。欢迎来到SO。 –