关于c ++:嵌套在类模板中的struct构造函数的问题

Issue with Constructor of Struct nested in Class Template

我需要将我编写的ints的链接列表类转换为类模板。我对嵌套在列表类(称为node)中的结构的构造函数和析构函数有问题。

布局:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  template <typename T>
  class List
  {
    public:
      //Stuff that's not important to this question
    private:
      struct Node
      {
        Node(T value);              // constructor
        ~Node();                // destructor
        Node *next;             // pointer to the next Node
        T data;               // the actual data in the node
        static int nodes_alive; // count of nodes still allocated
      };
  };

实施:

1
2
3
4
5
6
7
8
9
10
11
12
template <typename T>
typename List<T>::Node::Node(T value)
{
  data = value;
  next = 0;
}

template <typename T>
typename List<T>::Node::~Node()
{
   --nodes_alive;
}

错误:

  • 声明结尾应为";"

    类型名列表::节点::节点(t值)

  • "::"后应为标识符或模板ID

    类型名列表::节点::~节点()。

  • 在"~"后面应输入类名以命名析构函数

    类型名列表::节点::~节点()。

  • 不太确定这里发生了什么。我的实现在一个单独的文件中,包含在头文件的底部。任何帮助都将不胜感激。


    很简单:去掉typename关键字。因为您正在编写一个构造函数/析构函数,并且没有返回类型,所以不需要它。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    template <typename T>
    List<T>::Node::Node(T value)
    {
      data = value;
      next = 0;
    }

    template <typename T>
    List<T>::Node::~Node()
    {
       --nodes_alive;
    }