C++使用模板编译错误

Gue*_*ham 0 c++ syntax templates

我有这个功能:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

expected constructor, destructor, or type conversion before '*' token
expected `;' before '*' token
Run Code Online (Sandbox Code Playgroud)

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

Emi*_*ier 8

它应该是

template <typename T>
typename List<T>::ListNode *List<T>::find(int index) const
// ...
Run Code Online (Sandbox Code Playgroud)

typename告诉编译器List<T>::ListNode代表一个类型.在模板内部时::,遇到时会出现解析歧义.因此,typename当后面的任何::类型是一个类型时,您必须使用该关键字.

  • 4K!哇噢!:-) (2认同)