Ошибка компиляции C ++ с шаблонами - PullRequest
0 голосов
/ 27 апреля 2011

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

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 Ответ

8 голосов
/ 27 апреля 2011

должно быть

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...