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

6

我正在尝试编写一个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?很明显它是一个类型,不是吗?

忘记加上 template <typename T> 了吗? - Xiaotian Pei
抱歉,我的错误。template <typename T> 存在,只是忘记在问题中添加它。已编辑原帖。 - JamesLens
我在我的回答中放了一个链接。 - Xiaotian Pei
1个回答

5

look here

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

啊,C++你真是太复杂了。谢谢,这回答了我的问题。 - JamesLens
2
另外,如果有人感兴趣,可以参考该页面的其他答案。 - JamesLens
我有一个问题:如果我想单独实现Node,怎么办?我的意思是,在当前文件之外。 - Tinyden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接