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

Syntax errors in template method that I don't understand

本文关键字:语法 错误 模板方法 明白      更新时间:2023-10-16

我为一个学校项目写了一个简短的模板方法,但遇到了我不理解的奇怪语法错误。它们与我声明的模板有关(当注释掉包含模板的标头时,main()中的所有错误都会消失),但我不知道发生了什么。我包括和"intersecthHeader.h",并使用std命名空间。在我的main()函数中,我所做的就是声明一个向量:

向量v1;--错误:C2065"字符串"未声明的标识符,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语法错误缺少";"在"<"之前,C2059语法错误"<"。

所有这些都发生在第二行"向量相交"(constvector&v1,常量向量&v2)"

您不应该在任何头文件中执行using namespace std。您应该将显式std::名称空间添加到模板实现中,问题应该会消失(假设您已经包含了适当的标准库头)。