2013-09-26 4 views
0

Я пытаюсь изучить использование шаблонов в C++. Я создал узел структур, которые я использую в реализации класса очереди, но я получаю ошибку компилятора: Error»ожидаемый тип спецификатор перед тем qnode в член функции BOOL MyQueue :: добавить (данные T)с использованием шаблона структуры в реализации класса шаблона

#include <iostream> 

using namespace std; 

template <typename T> 
struct qnode { 
    qnode* Node; 
    T data; 
}; 

template <class T> 
class MyQueue { 
    qnode<T>* front; 
    qnode<T>* end; 
    public: 
    MyQueue() { 
     front=NULL; 
     end=NULL; 
    } 
    bool add (T n); 
    T get(void); 
    bool empty(void) 
    { 
     if (front == NULL) 
      return true; 
     else 
      return false; 
    } 

    size_t size(void) 
    { 

    } 
}; 

template <typename T> 
    bool MyQueue<T>::add (T n) 
    { 
     qnode<T>* temp = new qnode; 
     temp->data = n; 
     temp->Node = NULL; 
     if (front == NULL) 
     { 
      cout << "Adding front qnode " << endl; 
      front = end= temp; 
      // front->Node = end; 
      return true; 
     } 
      cout << "Adding qnode " << endl; 
     end->Node = temp; 
     end=temp; 
    //delete temp; 

     return true; 
    } 

Я глядя вперед для хорошего объяснения, как шаблонных параметров разрешаются в такой вложенной реализации.

+0

@ZackNewsham не в C++ – 999k

+0

@ 555k ahh - спасибо, я знаю, что это сделано в C. Я удалю комментарий –

+0

Как сообщение об ошибке может быть связано с функцией 'MyQueue :: add (T data)' если код называет параметр 'n'? – 6502

ответ

2

Ваш new имеет синтаксическую ошибку.

qnode<T>* temp = new qnode; 

должен быть

qnode<T>* temp = new qnode<T>(); 

Помните, что шаблонный шаблон без параметров шаблона не имеет смысла для компилятора. Всякий раз, когда вы вводите qnode (после первоначальной декларации), вам нужно также ввести параметры своего шаблона!

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