1

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

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;
}

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

if (!IsinList (words, temp))   
    goodwords.push_back(temp);

但我收到此错误:

'std::list' : use of class template requires template argument list

我无法弄清楚问题是什么。我检查了以前提出的问题,但没有帮助。你能向我解释我做错了什么吗?

4

2 回答 2

6

那里的错字:

list.begin() / list.end()

应该

l.begin() / l.end()

您的变量被称为l,而不是list

编辑:

正如马蒂尼奥所指出的,这可能还不够。一些编译器会接受这个,但由于迭代器依赖于模板参数,你可能需要一个类型名:

typename list<T>::iterator it=list.begin()
于 2012-05-23T11:48:21.350 回答
2

您打错字(listvs. l)并且没有指定那list<T>::iteratortypename. 此外,您应该通过listreference-to-const 传递和 search 参数。总而言之,它应该是这样的:

template <class T>
bool IsinList(const list<T>& l, const T& x)
{
    typename list<T>::const_iterator first = l.begin(), last = l.end();
    for(; first != last; ++first)
    {
        if (*it == x)
            return true;
    }
    return false;
}

就是说,还是不要用这个。std::find改用更好

if (std::find(words.begin(), words.end(), temp)==words.end())
{
  goodwords.push_back(temp);
}
于 2012-05-23T12:03:46.543 回答