Ошибка компиляции C с шаблонами

#c #templates #syntax

#c #шаблоны #синтаксис

Вопрос:

У меня есть эта функция:

 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. использует ли getLength() метод, зависящий от типа?

Ответ №1:

Это должно быть

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

typename сообщает компилятору, что List<T>::ListNode представляет тип. Внутри шаблона возникает неоднозначность синтаксического анализа, когда :: встречается. Поэтому вы должны использовать typename ключевое слово, когда все, что следует :: за ним, является типом.

Комментарии:

1. @Max: Я собирался, но для этого вам придется подождать 15 или около того минут.