我正在尝试编写一个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