创建模板类后不是类,命名空间或枚举?

时间:2016-03-08 15:48:55

标签: c++

我试图模板化几个类(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也被声明,为什么我会收到这些错误?

2 个答案:

答案 0 :(得分:11)

LinkedListNode不是类型,但LinkedListNode<T>是。在定义#include之前,请务必implement LinkedListNode::LinkedListNode() and other member functions in the header fileLinkedList<T>此标头文件。

template <class T>
class LinkedList
{
private:
    LinkedListNode<T> *head;
    LinkedListNode<T> *current;
}

答案 1 :(得分:3)

基本上,编译器说你没有类型LinkedListNode,编译器是对的 - LinkedListNode是模板,而不是类型。要形成类型,您需要使用参数实例化模板。例如,LinkedListNode<int>是一种类型。

但是,您的编译器可以提供更好的诊断。例如,g ++会:

  

4:错误:在'x'

之前缺少模板参数