【发布时间】:2015-07-29 00:35:58
【问题描述】:
我正在尝试编写一个 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>? -
对不起,我的错误。模板
存在,只是忘记在问题中添加它。编辑了 OP。 -
我在我的答案中放了一个链接。
标签: class templates c++11 nested