使用std :: list编译错误

זאב*_*כהן 1 c++ templates

我有这个简单的函数来检查值是否在列表中:

template <class T>
bool IsinList(list<T> l, T x)
{
    for(list<T>::iterator it=list.begin(); it != list.end(); it++)
    {
        if (*it == x)
            return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

我在同一个.cpp文件中使用了这个函数,如下所示:

if (!IsinList (words, temp))   
    goodwords.push_back(temp);
Run Code Online (Sandbox Code Playgroud)

但我收到这个错误:

'std::list' : use of class template requires template argument list
Run Code Online (Sandbox Code Playgroud)

我无法弄清问题是什么.我检查过以前的问题,但没有帮助.你能解释一下我做错了什么吗?

Luc*_*ore 6

错字:

list.begin() / list.end()
Run Code Online (Sandbox Code Playgroud)

应该

l.begin() / l.end()
Run Code Online (Sandbox Code Playgroud)

你的变量被调用l,而不是list.

编辑:

正如马丁霍所指出的那样,这可能还不够.有些编译器会接受这个,但由于迭代器依赖于模板参数,因此您可能需要一个typename:

typename list<T>::iterator it=list.begin()
Run Code Online (Sandbox Code Playgroud)