制作模板类后,无法创建类、命名空间或枚举?

8

我正在尝试将一些类(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: 错误:未知类型名称'LinkedListNode'; 你是不是指 'LinkedList'? LinkedListNode *head; ^~~~~~~~~~~~~~ LinkedList ./LinkedList.h:13:7: 注意:'LinkedList'在此声明 class LinkedList{ ^ ./LinkedList.h:40:3: 错误:未知类型名称'LinkedListNode'; 你是不是指 'LinkedList'? LinkedListNode *current; ^~~~~~~~~~~~~~ LinkedList ./LinkedList.h:13:7: 注意:'LinkedList'在此声明 class LinkedList{ ^ LinkedList.cpp:7:1: 错误:'LinkedListNode'不是类、命名空间或枚举 LinkedListNode::LinkedListNode(){ ^ ./LinkedList.h:5:7: 注意:'LinkedListNode'在此声明 class LinkedListNode{ ^

如果说我的LinkedListNode也被声明了,为什么会出现这些错误?

2个回答

12

LinkedListNode 不是一个类型,但 LinkedListNode<T> 是一个类型。请确保在头文件中实现 LinkedListNode::LinkedListNode() 和其他成员函数,并在 LinkedList<T> 的定义之前 #include 这个头文件。

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

3
基本上,编译器在说您没有类型LinkedListNode,并且编译器是正确的 - LinkedListNode是一个模板,而不是一种类型。 要形成一种类型,您需要使用参数实例化模板。 例如,LinkedListNode是一种类型。
但是,您的编译器可能会提供更好的诊断。例如,g ++将:
4:错误:'x'之前缺少模板参数

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接