#ifndef __linkedListH__
#define __linkedListH__
template<class T>
class Node
{
public:
T data;
Node *next;
};
template<class T>
class linkedList
{
public:
Node<T> *head;
linkedList();
Node<T>* returnHead();
Node<T>* Insert(Node *head,T data);
};
template<class T>
linkedList<T>::linkedList()
{
head = NULL;
}
Node* linkedList<T>::returnHead()
{
return head;
}
Node* linledList<T>::Insert(Node *head,int data)
{
Node *newNode = new Node();
newNode->data = data;
newNode->next = NULL;
if(!head)
return newNode;
Node *temp = head;
while(temp->next)
{temp=temp->next;}
temp->next = newNode;
return head;
}
#endif
在链接列表的这个实现中,请帮助我声明“returnHead”和“Insert”方法。当我从main函数调用这些方法时,我在声明这两种方法时遇到以下错误:
1.ISO C ++禁止声明'Node'没有类型 2.expected';'在'*'标记之前
答案 0 :(得分:1)
您错过了一些template <class T>
和<T>
组件:
template <class T>
Node<T>* linkedList<T>::returnHead()
{
return head;
}
template <class T>
Node<T>* linledList<T>::Insert(Node<T> *head,int data)
{
Node<T> *newNode = new Node<T>();
newNode->data = data;
newNode->next = NULL;
if(!head)
return newNode;
Node<T> *temp = head;
while(temp->next)
{temp=temp->next;}
temp->next = newNode;
return head;
}
这需要在每个成员函数之前重复template
声明标头,这是为什么类模板的成员函数通常在它们被声明的类中内联实现的原因之一。
另外,我认为参数data
的类型应为T
,而不是int
。否则,它没有多大意义。
作为补充说明,您可能希望为Node
类模板提供构造函数(使用next
和data
),这样您就不必对其进行初始化来自外面。
无关的问题:包含两个连续下划线的名称(或以下划线后跟大写字母开头的下划线)保留给编译器&amp;标准库;将它们用于自己的东西是非法的。适当地重命名包括警卫。