-1

我有一个基于链接列表的队列/堆栈程序,我试图将其转换为模板(我有 .h 和相应的 .template 文件,用于队列、堆栈、链接列表和节点)。但是,当我尝试实例化队列时,gcc 会抛出此错误:

LinkedList.template: In instantiation of ‘class LinkedList<int>’:
Queue.h:11:45:   required from ‘class Queue<int>’
Grades.cpp:15:13:   required from here
LinkedList.template:66:6: error: no type named ‘value_type’ in ‘class node<int>’
 void LinkedList<value_type>::addToHead(typename node<value_type>::value_type& entry)

这是我在错误中引用的实例化,尽管我认为这不是问题:

void LinkedList<value_type>::addToHead(typename node<value_type>::value_type& entry)
{
    head = new node<value_type>(entry, head);
    if (tail == NULL) {tail = head;}
    current = head;
}

这是我对 value_type 的 typedef 声明:

template <typename T>
class Queue
{
    public:
    typedef typename LinkedList<T>::value_type value_type;
    ...
}

这是将 typedef 用于我想做的事情的正确方法吗?它应该从 LinkedList.h 中获取模板类型:

template <typename value_type>
class LinkedList
{
    ...
}
4

1 回答 1

0

模板参数的名称在模板之外不可见。您需要一个 typedef 来提供该名称:

template <class T>
class LinkedList
{
typedef T value_type;
...
};
于 2018-10-18T02:36:04.107 回答