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

Jam*_*ens 5 templates nested class c++11

我正在尝试编写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;
}
Run Code Online (Sandbox Code Playgroud)

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

当我尝试如下定义listSearch函数时,出现错误:“模板类型参数的模板参数必须是类型;您忘记了'typename'吗?”。有人可以解释什么地方不对吗?

template <typename T>
std::shared_ptr<LinkedList<T>::Node> LinkedList<T>::listSearch(const T &input) { ... }
Run Code Online (Sandbox Code Playgroud)

编辑:

好的,所以我重新编译了gcc,错误消息更加清晰了。它需要以下内容:

std::shared_ptr<typename LinkedList<T>::Node> LinkedList<T>::listSearch(const T &input) const { ... }
Run Code Online (Sandbox Code Playgroud)

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

Xia*_*Pei 5

看这里

template <typename T>
std::shared_ptr<typename LinkedList<T>::Node> LinkedList<T>::listSearch(const T &input) { ... }
Run Code Online (Sandbox Code Playgroud)

  • https://isocpp.org/wiki/faq/templates#nondependent-name-lookup-types 任何感兴趣的人的另一个答案。 (2认同)