#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 или около того минут.