2012-02-25 17 views
0

このコードは自分のシステムでコンパイルされていません。私はEclipseを使用しています。ここでリンクリストがコンパイルされていません

// Linked list head 
template<class T> 
struct Node 
{ 
    // constructor 
    Node(const T& a) : pNext(NULL), data(a) {} 
    Node* pNext; //link 
    T data; 
}; // end of header 


// List code 
#include <iostream> 
#include "LinkedList.h" 

template<class T> 
class linkedList 
{ 
public: 
    typedef Node<T> Node; 
    //constructor creates empty list 
    linkedList() : pHead(NULL), size(0) {} 

~linkedList() 
{ 
    Node* pIter = pHead; 
    while(pIter != NULL) 
    { 
     Node* pNext = pIter->pNext; 
     delete pIter; 
     pIter = pNext; 
    } 
} 

void insert(const T& data) 
{ 
    Node* pInsert = new Node(data); 
    if(pHead == NULL) 
    { 
     pHead = pInsert; 
    } 
    else 
    { 
     pInsert->pNext = pHead; 
     pHead = pInsert; 
    } 
} 

private: 
    Node* pHead; // always points to head of list 
    unsigned int size; // stores number of elements in list 
}; 

はエラーメッセージです:

./LinkedList.cpp:14:18: error: declaration of 'typedef struct Node<T> linkedList<T>::Node' 
../LinkedList.h:4:1: error: changes meaning of 'Node' from 'struct Node<T>' 
make: *** [LinkedList.o] Error 1 

答えて

4

誤差はかなり明確である:名前Nodeを再使用しないでください。代わりに、あなたはこのような何かを書くことができます。

typedef Node<T> node_type; 

テンプレート名とタイプ名は、C++で同じ名前空間を共有するので、あなたは、1つのテンプレートと他のタイプであっても、二つの異なるエンティティに同じ名前を使用することはできません。

(多少接線方向、そこCおよびC++でタグ名両方を囲む微妙かなりの量である; this articleが読み取り価値があり、そしてthisと​​)

関連する問題