【问题标题】:C++ Nested class in class template declaration类模板声明中的 C++ 嵌套类
【发布时间】: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 &lt;typename T&gt;
  • 对不起,我的错误。模板 存在,只是忘记在问题中添加它。编辑了 OP。
  • 我在我的答案中放了一个链接。

标签: class templates c++11 nested


【解决方案1】:

here

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-04
相关资源
最近更新 更多