声明模板类中的结构,未定义成员函数

Lin*_*enk 6 c++ templates struct

我目前正在尝试使用列表类专用的节点结构在列表模板类中实现排序算法.我正在使用一些私有递归函数,它返回一个指向节点类型的指针,导致g ++给我一个声明错误.这是我所拥有的样本 -

template<class T>
class SList
{
private:
    struct NODE
    {
        T* elem;
        NODE* next;
    } *_head, *_tail;

NODE* sort(NODE* node);

public:
    //other declarations...

}

template<class T>
NODE* SList<T>::sort(NODE* node) //Error: 'NODE' does not name a type
{
    //sorting algorithm
}
Run Code Online (Sandbox Code Playgroud)

这是c ++的限制还是我错过了什么?

Ste*_*mer 12

既然Node是一个内部类,你需要告诉编译器Node定义的来源.

此外,Node的定义根据SList模板参数的不同而变化(它是一个依赖类型)

所以你必须明确地这样指Node:

template<class T>
typename SList<T>::NODE* SList<T>::sort(typename SList<T>::NODE* node) 
{
    //sorting algorithm
}
Run Code Online (Sandbox Code Playgroud)
  • 注意typename因为Node是一个依赖类型(取决于类型SList)
  • 请注意SList<T>::Node因为Node是一个依赖SList类型的类型.