C++ 为没有默认构造函数的模板类定义Sentinel节点?
我需要创建模板类的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
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节点是合理的?