class 模板声明中的 C++ 嵌套 class
C++ Nested class in class template declaration
我正在尝试编写一个 C++11 链表实现,链表是一个模板 class,它的节点是一个嵌套的 class,如下所示:
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;
}
我假设 class 节点本身不是模板,但是当 LinkedList 被实例化时,它也会创建节点 class。
当我尝试按如下方式定义 listSearch 函数时,出现错误:"template argument for template type parameter must be a type; did you forget '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?是不是很明显是一种类型?
看here
template <typename T>
std::shared_ptr<typename LinkedList<T>::Node> LinkedList<T>::listSearch(const T &input) { ... }
我正在尝试编写一个 C++11 链表实现,链表是一个模板 class,它的节点是一个嵌套的 class,如下所示:
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;
}
我假设 class 节点本身不是模板,但是当 LinkedList 被实例化时,它也会创建节点 class。
当我尝试按如下方式定义 listSearch 函数时,出现错误:"template argument for template type parameter must be a type; did you forget '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?是不是很明显是一种类型?
看here
template <typename T>
std::shared_ptr<typename LinkedList<T>::Node> LinkedList<T>::listSearch(const T &input) { ... }