预先感谢。 我正在使用模板类,并且出现错误消息“错误C2955'列表':使用类模板需要模板参数列表”
这是我的课程列表
template <class T>
struct node{
T Data;
node<T> * prev;
node<T> * next;
};
template <class T>
class List
{
public:
node<T> * front;
node<T> * rear;
List();
virtual ~List();
bool isEmpty();
void insertFirst(T Data);
void insertBack(T Data);
void insertBefore(node<T> * before, T Data);
void insertAfter(node<T> * after, T Data);
int removeFirst();
int removeLast();
void removeBefore(node<T> * before);
void removeAfter(node<T> * after);
node<T> * find(T Data);
//void destroy();
void insertRangeBefore(node<T> * before, List<T> range);
void insertRangeAfter(node<T> * after, List<T> range);
void removeRange(node<T> * rangeFirst, node<T> * rangeLast);
template <class T>
List getSublist(node<T> * rangeFirst, node<T> * rangeLast);
};
我要创建列表实例,然后返回子列表
template<class T>
List<T> List<T>::getSublist(node<T>* rangeFirst, node<T>* rangeLast) {
return List();
}
答案 0 :(得分:3)
template<class T>
List<T> List<T>::getSublist(node<T>* rangeFirst, node<T>* rangeLast)
// ^^^ corrections here
{
return List();
}
模板的{List
的非限定名称仅在其定义(及其成员的定义)内等同于完全限定的名称(List<T>
)。但是,这里的返回类型都不是,因此必须完全限定。
编辑您的头文件实际上并未声明此成员函数,并且您的代码仍将无法编译。您必须提供匹配声明,即
template<class T>
class List
{
...
List getSublist(node<T>*, node<T>*); // not a template
};
您的代码实际上声明了一个模板成员(具有另一种类型T
作为模板参数)。只需从成员声明中删除行template<class T>
。
顺便说一句,您可能要考虑使用node
的嵌套类型List<T>
。然后,您可以在几乎所有地方(几乎)用node<T>
替换node
(除非您必须符合条件,当它是List<T>::node
或typename List<T>::node
时)。