gpt4 book ai didi

class - 类模板声明中的 C++ 嵌套类

转载 作者:行者123 更新时间:2023-12-03 14:41:14 27 4
gpt4 key购买 nike

我正在尝试编写一个 C++11 链表实现,链表是一个模板类,它的节点是一个嵌套类,如下所示:

template <typename T>
class LinkedList {
public:
class Node;
std::shared_ptr<Node> listSearch(const T &input) const;

private:
std::shared_ptr<Node> head;
std::shared_ptr<Node> tail;
};

template <typename T>
class LinkedList<T>::Node {
private:
T data;
std::shared_ptr<Node> next;
}

我假设类 Node 本身不是模板,但是当 LinkedList 被实例化时,它也会创建 Node 类。

当我尝试如下定义 listSearch 函数时,出现错误:“模板类型参数的模板参数必须是一个类型;您是否忘记了‘typename’?”。有人可以解释一下有什么问题吗?
template <typename T>
std::shared_ptr<LinkedList<T>::Node> LinkedList<T>::listSearch(const T &input) { ... }

编辑:

好的,所以我用gcc重新编译,错误信息更清楚了。它想要以下内容:
std::shared_ptr<typename LinkedList<T>::Node> LinkedList<T>::listSearch(const T &input) const { ... }

为什么在 LinkedList::Node 之前需要 typename?它是一种类型不是很明显吗?

最佳答案

here

template <typename T>
std::shared_ptr<typename LinkedList<T>::Node> LinkedList<T>::listSearch(const T &input) { ... }

关于class - 类模板声明中的 C++ 嵌套类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30287402/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com