2014-12-12 4 views
0

У меня есть этот шаблон класса, который я создаюИспользование шаблона класса требует списка аргументов шаблона, что делать?

template <class T> class ArrayLLN { 
    private: 
    ArrayLLN *next; 
    T *item; 
public: 
    ArrayLLN(T i, ArrayLLN *n); 
    ~ArrayLLN(); 
    void insert(T n, int i, int m); 
    ArrayLLN *getnext(); 
    T *getitem(); 
    T remove(int i, int m); 
}; 

метод, который я имею проблемы с состоит в следующем.

ArrayLLN *getnext(); 

и записывается как

template <class T> ArrayLLN ArrayLLN <T> :: *getnext(){return next;} 

Как написано в настоящее время я получаю ошибку «Ошибка C2955:„ArrayLLN“: использование шаблона класса требует шаблона списка аргументов»

Следующая конфигурация произведены другие ошибки

template <class T> ArrayLLN *ArrayLLN <T> :: getnext(){return next;) 

Что можно сделать, чтобы исправить эту ошибку?

Может быть, это объявление может быть?

template <class T> T *ArrayLLN<T> :: getitem(){return item;} 
template <class T> ArrayLLN<T> *ArrayLLN<T>::getnext() { return next; } 
template <class T> T ArrayLLN <T> :: remove (int i, int m){ 
    T *tmp == NULL; 
    if(i == m && next){ 
     tmp = item; 
     item = next ->getitem(); 
     next = next->getnext(); 
    } 
    else if (i > m){ 
     m++; 
     tmp = next -> remove(i,m); 
    } 
    return tmp; 
} 
+0

«Следующая конфигурация вызвала другие ошибки» - какие другие ошибки? – davmac

+0

Я не получаю ту же ошибку с вашим новым кодом. 'T * tmp == NULL' должен быть' T * tmp = NULL'. –

ответ

2

Правильный синтаксис таков:

     // +-- argument list here     +-- bracket 
         // v           v not paren 
template <class T> ArrayLLN<T> *ArrayLLN<T>::getnext() { return next; } 
+0

К сожалению, это все равно дает мне ту же ошибку. – shotpaintballer

+0

Нечетный. Можете ли вы предоставить [MCVE] (https://stackoverflow.com/help/mcve), чтобы я мог воспроизвести ошибку? – Wintermute

+0

Я представил остальную часть деклараций метода и добавил в другие биты в своем исходном сообщении. Это весь код, который я получил до сих пор для этого класса. Я действительно новичок в шаблонах, поэтому я довольно потерял, что делать. Редактирование: Я думаю, я не уверен, как дать меньше кода для этого, поскольку я чувствую, что у меня есть довольно минимальный код для начала. – shotpaintballer

1

Внутри класса, ArrayLLN является впрыскивается имя класса, что позволяет опустить список аргументов шаблона. Вне класса вы должны предоставить его. Во-вторых, звезда находится в неправильном месте.

template <class T> ArrayLLN<T>* ArrayLLN <T> :: getnext(){return next;} 
+0

Это все равно дает мне такую ​​же ошибку. – shotpaintballer

Смежные вопросы