这些是Tree类中的函数,我会有一个State树和Person Tree,我想在main中说state-> find(fname,lname),因此TreeType属于State类型,因为state是类型状态。但是当TreeType属于Person类型时会发生错误,尽管我只在类型为State的情况下调用该函数。
Person * find(string fname, string lname, node<Person> * n) {
if(n->data->lname == lname && n->data->fname == fname)
return n->data;
else if(n->data->lname > lname)
find(fname, lname, n->left);
else
find(fname, lname, n->right);
}
Person * find(string fname, string lname, node<TreeType> * n) {
node<Person> * temp = n->data->people->root;
Person * p = find(fname, lname, temp);
if(p != NULL)
return p;
find(fname, lname, n->left);
find(fname, lname, n->right);
}
Person * find(string fname, string lname) {
return find(fname, lname, root);
}
答案 0 :(得分:0)
(强制性的健全性检查:如果您出于学业原因不这样做,请改用std::map
)。
您的第一个find
重载需要返回递归调用中的值,并处理n
为nullptr
的情况,而不是取消引用它。
Person * find(string fname, string lname, node<Person> * n) {
if (!n)
return n;
if(n->data->lname == lname && n->data->fname == fname)
return n->data;
if(n->data->lname > lname)
return find(fname, lname, n->left);
return find(fname, lname, n->right);
}
同样在第二次重载...你必须return
来自例如find(fname, lname, n->left);
。
如果启用警告,大多数编译器会警告您这类错误 - 例如海湾合作委员会g++ -Wall
。