我试图模板化几个类(LinkedListNode和LinkedList),这样
template <class T>
class LinkedListNode{
public:
T data;
LinkedListNode *next;
LinkedListNode();
};
在我的LinkedList类中,我有私有变量:
private:
LinkedListNode *head;
//iterator for traversing the list
LinkedListNode *current;
};
编译时,我遇到了奇怪的错误:
./ LinkedList.h:38:3:错误:未知类型名称&#39; LinkedListNode&#39 ;;你的意思是 &#39;链表&#39 ;? LinkedListNode * head; ^ ~~~~~~~~~~~~~ 链表 ./LinkedList.h:13:7:注意:&#39; LinkedList&#39;在这里宣布 class LinkedList { ^ ./LinkedList.h:40:3:错误:未知类型名称&#39; LinkedListNode&#39 ;;你的意思是 &#39;链表&#39 ;? LinkedListNode * current; ^ ~~~~~~~~~~~~~ 链表 ./LinkedList.h:13:7:注意:&#39; LinkedList&#39;在这里宣布 class LinkedList { ^ LinkedList.cpp:7:1:错误:&#39; LinkedListNode&#39;不是类,命名空间或 列举 一个LinkedListNode ::一个LinkedListNode(){ ^ ./LinkedList.h:5:7:注意:&#39; LinkedListNode&#39;在这里宣布 class LinkedListNode { ^
如果我的LinkedListNode也被声明,为什么我会收到这些错误?
答案 0 :(得分:11)
LinkedListNode
不是类型,但LinkedListNode<T>
是。在定义#include
之前,请务必implement LinkedListNode::LinkedListNode()
and other member functions in the header file和LinkedList<T>
此标头文件。
template <class T>
class LinkedList
{
private:
LinkedListNode<T> *head;
LinkedListNode<T> *current;
}
答案 1 :(得分:3)
基本上,编译器说你没有类型LinkedListNode
,编译器是对的 - LinkedListNode
是模板,而不是类型。要形成类型,您需要使用参数实例化模板。例如,LinkedListNode<int>
是一种类型。
但是,您的编译器可以提供更好的诊断。例如,g ++会:
4:错误:在'x'
之前缺少模板参数