c++ - 在模板类中声明一个结构,未为成员函数定义

标签 c++ templates struct

我目前正在尝试使用列表类私有(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/

相关文章:

python - Python 中的类 C 结构

c++ - “正则表达式”类型无法识别

c++ - 显式模板实例化示例

c++ - 满足条件时如何在中间停止折叠表达式函数调用并返回该值?

c - 理解 C 中的结构体和指针变量

c - 将文件中的数据读入C中的结构

c++ - std::transform() 在函数参数中传递引用

C++ tron AI 坚持自己的道路

c++ - 访问作为 vector 对的 map 值 C++

c++ - 使用带有多个模板参数的 CRTP 时如何声明模板默认值?