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

C++ Nested class in class template declaration

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

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;
}

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

当我尝试按如下方式定义 listSearch 函数时,出现错误:"template argument for template type parameter must be a type; did you forget '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) { ... }