Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.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
C++ 为没有默认构造函数的模板类定义Sentinel节点?_C++_C++11_Constructor_Skip Lists - Fatal编程技术网

C++ 为没有默认构造函数的模板类定义Sentinel节点?

C++ 为没有默认构造函数的模板类定义Sentinel节点?,c++,c++11,constructor,skip-lists,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

我需要创建模板类的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){}
}
模板
类节点{
私人:
std::pair\u pair;
节点*下一步;
公众:
节点(std::pair pair):_pair(pair){}
};
类产品{
私人:
int-pid;
std::字符串名;
公众:
产品(int-id,std::string-name):pid(id),name(name){}
}
现在我想做一些类似的事情

Node<Product, int> *base = new Node<Product, int>(/*which needs an arguement*/);
Node*base=新节点(/*需要参数*/);
我不需要通过一个,它告诉我默认构造函数不可用


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

如果我正确理解了您的问题,那么您所要做的似乎就是定义默认构造函数

#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*/);
}
#包括
#包括
模板
类节点{
私人:
std::pair\u pair;
节点*下一步;
公众:
Node(){}//编辑
节点(std::pair pair):_pair(pair){}
};
类产品{
私人:
int-pid;
std::字符串名;
公众:
Product(){}//EDIT
产品(int-id,std::string-name):pid(id),name(name){}
};
int main(){
Node*base=新节点(/*需要参数*/);
}

以上代码编译并运行良好。如果我过于简单,请原谅。

如果我正确理解了您的问题,那么您所要做的似乎就是定义默认构造函数

#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*/);
}
#包括
#包括
模板
类节点{
私人:
std::pair\u pair;
节点*下一步;
公众:
Node(){}//编辑
节点(std::pair pair):_pair(pair){}
};
类产品{
私人:
int-pid;
std::字符串名;
公众:
Product(){}//EDIT
产品(int-id,std::string-name):pid(id),name(name){}
};
int main(){
Node*base=新节点(/*需要参数*/);
}

以上代码编译并运行良好。如果我过于简单,请原谅。

通常这是通过将节点设置为
nullptr
来实现的。然后,您只需检查节点是否等于
nullptr
,如果它等于,则您已到达终点。那么,您的问题到底是什么?上面的代码确实没有编译。我可以解释原因,但你似乎知道。你描述了一些你不能做的事情,但你没有描述你想做的是你应该做的。为什么需要Sentinal节点,它需要具有哪些属性?为什么你认为你需要它?@Yakk我需要定义一个基于skip的stl容器lists@AAASTL是一个古老的图书馆。你是说一个
std
样式的容器?为什么使用Sentinal节点是合理的?通常,这是通过将节点设置为
nullptr
来实现的。然后,您只需检查节点是否等于
nullptr
,如果它等于,则您已到达终点。那么,您的问题到底是什么?上面的代码确实没有编译。我可以解释原因,但你似乎知道。你描述了一些你不能做的事情,但你没有描述你想做的是你应该做的。为什么需要Sentinal节点,它需要具有哪些属性?为什么你认为你需要它?@Yakk我需要定义一个基于skip的stl容器lists@AAASTL是一个古老的图书馆。你是说一个
std
样式的容器?为什么使用Sentinal节点是合理的?