为模板类定义Sentinel节点,该类没有默认构造函数?

时间:2016-03-10 14:21:06

标签: c++ c++11 constructor skip-lists

我有一个要求,我必须创建模板类的sentinel节点。哪个需要参考自己

template <class T1, class T2>
class Node{
   private:
      std::pair<T1, T2> _pair;
      Node * next;
   public:
      Node(std::pair<T1, T2> pair) : _pair(pair){}
};

class Product{
  private:
    int pid;
    std::string name;
  public:
    Product(int id, std::string name):pid(id), name(name){}
}

现在我想做一些像

这样的事情
Node<Product, int> *base = new Node<Product, int>(/*which needs an arguement*/);

我不必传递一个,它告诉我默认构造函数不可用。

我需要创建一个跳过列表。这需要边界哨兵。

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,您似乎只需要定义默认构造函数吗?

#include <string>
#include <utility>

template <class T1, class T2>
class Node{
private:
  std::pair<T1, T2> _pair;
  Node * next;
public:
  Node() {} // EDIT
  Node(std::pair<T1, T2> pair) : _pair(pair){}
};

class Product{
private:
  int pid;
  std::string name;
public:
  Product() {} // EDIT
  Product(int id, std::string name):pid(id), name(name){}
};

int main() {
  Node<Product, int> *base = new Node<Product, int>(/*which needs an arguement*/);
}

以上编译并运行正常。如果我过于简单化,请原谅我。