2012-10-08 97 views
-1

我想實現C++鏈表,我得到了這個錯誤6次。C++模板錯誤:預期的構造函數,析構函數或類型轉換之前的'<'令牌

上線: error: expected constructor, destructor, or type conversion before '<' token 5,13,​​19,26,45,

和標題的第13行:error: expected unqualified-id before 'template'

你知道爲什麼嗎?

頭:

#ifndef LINKEDLIST_H 
#define LINKEDLIST_H 
// includes 
#include <iostream> 
#include <stdexcept> 

template <typename Type> struct Node 
{ 
    Type& data; 
    struct Node* next; 
} 

template <typename Type> class LinkedList 
{ 
private: 
    Node* head; 
    unsigned length; 
public: 
    LinkedList(); 
    virtual ~LinkedList(); 
    LinkedList(const LinkedList& other); 
    LinkedList& add(Type& data); 
    Node& operator[](unsigned index); 
    friend ostream& operator << (ostream& out, Node& data); 
}; 

#endif // LINKEDLIST_H 

來源:

#include "../include/LinkedList.h" 
using namespace std; 

template <typename Type> 
LinkedList<Type>::LinkedList<Type>() 
{ 
    head = NULL; 
    head->next = NULL; 
    length = 0; 
} 

template <typename Type> 
LinkedList<Type>::~LinkedList<Type>() 
{ 
    //dtor 
} 

template <typename Type> 
LinkedList<Type>::LinkedList(const LinkedList& other) 
{ 
    //copy ctor 
} 


template <typename Type> 
LinkedList<Type>& LinkedList<Type>::add(Type& data) 
{ 
    Node<Type>* ptr = head, *last; 
    while(ptr) 
    { 
     last = ptr; 
     ptr = ptr->next; 
    } 
    // ptr now is null 
// try {ptr = new Node<Type>();} 
// catch (bad_alloc& e) { cout << "Bad allocation .."; terminate();} 
    ptr->data = data; 
    ptr->next = NULL; 
    last->next = ptr ; // link the previos; 
    ++length; 
    return *ptr; 
} 

template <typename Type> 
Node<Type>& LinkedList<Type>::operator[] (unsigned index) 
{ 
    if(index < 0 || index >= length) throw std::out_of_range("Out of range exception thrown!"); 
    Node<Type>* ptr = head; 
    for(int i = 0; i < index; ++i) ptr = ptr->next; 
    return *ptr; 
} 

template <typename Type> 
std::ostream& operator << (std::ostream& out, Node<Type>& data) 
{ 
    out << data.data << " "; 
    return out; 
} 

你知道這是什麼錯誤信息意味着什麼?以及如何解決它?

非常感謝。

回答

4

看起來你需要添加幾個';'到您的聲明結束。

template <typename Type> struct Node 
{ 
    Type& data; 
    struct Node* next; 
}; // <<< 
+0

這似乎是我用Java很多..謝謝。至少解決了這個問題。謝謝!附:爲什麼我得到這個錯誤信息?這個消息是什麼意思? – iLoveC

+0

錯誤是因爲它沒有使用模板;並將它用作下一個語句的可能返回類型,因爲它看起來像這樣。 – Julian

相關問題