我目前正在尝试使用列表类私有(private)的节点结构在列表模板类中实现排序算法。我正在使用一些私有(private)递归函数,这些函数返回一个指向节点类型的指针,这导致 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
}
这是 c++ 的限制还是我遗漏了什么?
最佳答案
自 Node
是一个内部类,你需要告诉编译器在哪里 Node
的定义来自。
此外,Node 的定义根据什么而改变 SList
的模板参数是(它是一个依赖类型)
所以你必须明确引用Node
因此:
template<class T>
typename SList<T>::NODE* SList<T>::sort(typename SList<T>::NODE* node)
{
//sorting algorithm
}
- 注意
typename
因为 Node 是一个依赖类型(它取决于SList
的类型) - 注意
SList<T>::Node
因为 Node 是 依赖 的类型SList
的类型。
关于c++ - 在模板类中声明一个结构,未为成员函数定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13559756/