我有一个基于链表的队列/堆栈程序,我正在尝试将其转换为模板(我有.h和相应的Queue,Stack,LinkedList和Node的.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
{
...
}
答案 0 :(得分:0)
在模板外部看不到模板参数的名称。您需要一个typedef来提供该名称:
template <class T>
class LinkedList
{
typedef T value_type;
...
};