Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Class C++;类模板声明中的嵌套类_Class_Templates_C++11_Nested - Fatal编程技术网

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

Class C++;类模板声明中的嵌套类,class,templates,c++11,nested,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

我试图编写一个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;
}
模板
类链接列表{
公众:
类节点;
std::shared_ptr listSearch(常量和输入)常量;
私人:
std::共享头;
std::共享_ptr尾;
};
模板
类LinkedList::Node{
私人:
T数据;
std::共享\u ptr next;
}
我假设类节点本身不是模板,但是当LinkedList被实例化时,它也会创建节点类

当我尝试按如下方式定义listSearch函数时,我得到一个错误:“template type参数的模板参数必须是一个类型;您是否忘记了'typename'?”。有人能解释一下怎么回事吗

template <typename T>
std::shared_ptr<LinkedList<T>::Node> LinkedList<T>::listSearch(const T &input) { ... }
模板
std::shared_ptr LinkedList::listSearch(const T&input){…}
编辑:

好的,我重新编译了gcc,错误信息更清晰了。它希望做到以下几点:

std::shared_ptr<typename LinkedList<T>::Node> LinkedList<T>::listSearch(const T &input) const { ... }
std::shared_ptr LinkedList::listSearch(const T&input)const{…}
为什么在LinkedList::Node之前必须使用typename?这不是很明显的一种类型吗?

模板
std::shared_ptr LinkedList::listSearch(const T&input){…}

忘了放
模板
?对不起,我弄错了。模板存在,只是忘记在问题中添加它。我在我的答案中加了一个链接。啊,C++你是如此复杂。谢谢,这回答了我的问题。我有一个问题:如果我想单独实现节点,该怎么办?我是说,在当前文件之外?
template <typename T>
std::shared_ptr<typename LinkedList<T>::Node> LinkedList<T>::listSearch(const T &input) { ... }