我对节点类有以下实现:
template<class T> class binTree; // forward declaration
template<class T> class Node {
friend class binTree<T>; // class binTree is friend
public:
//default constructor
Node(const T& d = T(), Node<T> *l = NULL, Node<T> *r = NULL) : data(d),
left(l), right(r) {};
private:
T data;
Node<T> *left, *right;
};
我正在尝试将新节点定义为我的树的根,但我不断收到编译错误......
template<class T>
void binTree<T>::insert(Node<T>*& n, const T& d){
if(n == NULL)
root = Node<T>(d);
}
我对const T& d = T() parameter
感到困惑。
答案 0 :(得分:0)
我认为在尝试定义成员之前,您只需要声明binTree类及其成员。以下代码为我编译:
#include <cstdlib>
template<class T> class binTree; // forward declaration
template<class T> class Node {
friend class binTree<T>; // class binTree is friend
public:
//default constructor
Node(const T& d = T(), Node<T> *l = NULL, Node<T> *r = NULL) : data(d),
left(l), right(r) {};
private:
T data;
Node<T> *left, *right;
};
template <class T> class binTree
{
public:
binTree() { }
void insert(Node<T>*& n, const T& d);
private:
Node<T> root;
};
template<class T>
void binTree<T>::insert(Node<T>*& n, const T& d){
if(n == NULL)
root = Node<T>(d);
}
int main(int argc, char **argv)
{
Node<int>* nt;
binTree<int> btree;
btree.insert(nt, 4);
}
话虽如此,你的数据结构概念似乎搞砸了。为什么binTree中的insert例程需要一个节点参数?
答案 1 :(得分:0)
我不太确定为什么你的默认构造函数中有d变量的默认覆盖。在我的Tree for Tree类的实现中,我没有默认赋值。我认为问题是T()。我建议不要在params列表中尝试执行默认分配,而是在BMI列表中执行此操作。所以它看起来有点像“数据(新T),左(NULL),右(NULL)”
另外我会说我不太确定你为什么使用T()。如果这不起作用,请发布错误代码,以便我们更好地了解正在发生的事情。