使用模板时不要忘记把NULL实例化!

下面是测试二叉树的诸函数时写的一段代码(参照了国外的经典教材、清华大学出版社的《数据结构C++语言描述》):

   

TreeNode<char> *root1;
    TreeNode<char> *a,*b,*c,*d,*e,*f,*g,*h,*i;
    d = GetTreeNode('D',(TreeNode<char> *)NULL,(TreeNode<char> *)NULL);
    e = GetTreeNode('E',(TreeNode<char> *)NULL,(TreeNode<char> *)NULL);
    b = GetTreeNode('B',(TreeNode<char> *)NULL, d);
    c = GetTreeNode('C',e, (TreeNode<char> *)NULL);
    a = GetTreeNode('A',b, c);
    root = a;

注意到NULL的使用方法了吗?(TreeNode<char> *)NULL!!没错,NULL也是要实例化的!

另外,本人用codeblocks 10.05编译的时候,发现编译器对书中的代码报错了。在书中,TreeNode的构造函数这样写:

TreeNode(const T& item,TreeNode* lptr,TreeNode* rptr):
    data(item),left(lptr),right(rptr){ }


然后GetTreeNode的函数这样写:

template <class T>
TreeNode<T>* GetTreeNode(T item,TreeNode<T>* lptr,TreeNode<T>* rptr)
{
    TreeNode<T>* p=new TreeNode<T>(item,lptr,rptr);
    return p;
}

然后调用GetTreeNode函数时这样写:

d = GetTreeNode('D');

于是编译器报错,说找不到和GetTreeNode('D')匹配的函数类型。不知道在vc下面会不会报错。算是个小小的教训吧,咱们别偷懒,有几个参数就写几个参数吧。改成下面的形式就对了:

d = GetTreeNode('D',(TreeNode<char> *)NULL,(TreeNode<char> *)NULL);


 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值