我正在设计一个二进制搜索树,允许用户输入任何数据类型的值,而不仅仅是 int 。
为了实现这一点,我试图使用带有结构的模板。
我将结构定义如下
template <class T>
struct node
{
struct node *left;
T info;
struct node *right;
}*root;
现在我尝试在名为BST(二叉搜索树)的类中使用它
template <class T>
class bst
{
public:
void insert(node *,node *);
void inorder(node *);
};
但编译器抛出错误,
'node&lt;的模板声明T&gt; * root'。
我如何使用带有struct变量的模板?
答案 0 :(得分:2)
您无法在模板类声明后声明root
,因为无法推断出模板参数,您可以:
template <class T>
struct node
{
struct node *left;
T info;
struct node *right;
};
node <int> * root;
,您应该在使用node
时指定模板参数类型,例如:
template <class T>
class bst
{
public:
void insert(node<T>*, node<T>*);
void inorder(node<T>*);
};
答案 1 :(得分:1)
template <class T>
struct node
{
// […]
} *root;
如果没有类型,则无法声明对象。 node
是一个模板,而不是一个类型 - root
应该具有哪种类型?
我相信你想在bst
内声明它:
template <class T>
class bst
{
node<T>* root;
// ^^^
// Supply the appropriate template arguments
// ... or use a typedef:
using node_type = node<T>;
// […]
};
答案 2 :(得分:0)
您可以使用typedef定义您的Node类型:
#include <iostream>
#include <typeinfo>
using namespace std;
template <class T>
struct node
{
node *left;
T info;
node *right;
typedef node<T>* root;
};
int main()
{
node<int>::root root = new node<int>();
cout<<typeid(root).name()<<endl;
return 0;
}