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

时间:2015-05-17 13:34:36

标签: class templates c++11 nested

我试图编写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函数时,我收到一个错误:&#34;模板类型参数的模板参数必须是一个类型;你忘了&#39; typename&#39;?&#34;。有人可以解释什么是错的吗?

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?难道它不是一个类型吗?

1 个答案:

答案 0 :(得分:4)

here

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