此代码未在我的系统中编译;我正在使用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
答案 0 :(得分:4)
错误相当明确:不要重复使用名称Node
。相反,你可以这样写:
typedef Node<T> node_type;
模板名称和类型名称在C ++中共享相同的名称空间,因此您不能对两个不同的实体使用相同的名称,即使一个是模板而另一个是类型。
(有些切线,在C和C ++中,标签名称有相当多的微妙之处; this article可能值得一读,this和{{ 3}}。)