C ++使用模板编译错误

时间:2011-04-27 03:41:22

标签: c++ templates syntax

我有这个功能:

template <typename T>
List<T>::ListNode *List<T>::find(int index) const
{
    if ( (index < 1) || (index > getLength()) )
        return NULL;
    else
    {
        ListNode *cur = head;
        for (int skip = 1; skip < index; ++skip)
            cur = cur->next;
        return cur;
    }
}

这给了我这两个错误,每个错误都在第二行:

expected constructor, destructor, or type conversion before '*' token
expected `;' before '*' token

我使用模板的所有其他方法都可以正常工作。我认为问题是我调用ListNode结构的语法错误。我之前没有模板工作,现在我正在尝试用模板实现它,我收到这些错误。

1 个答案:

答案 0 :(得分:8)

应该是

template <typename T>
typename List<T>::ListNode *List<T>::find(int index) const
// ...

typename告诉编译器List<T>::ListNode代表一种类型。在模板内部时,遇到::时会出现解析歧义。因此,当typename后面的任何类型为

时,您必须使用::关键字。