霍天青 2015-08-05 03:53 采纳率: 100%
浏览 1637
已采纳

请问为什么下面的代码会报错?

我先把代码贴出来,有50行,但大家不必全看,我会指出来可能出错的地方。谢谢。

 #include <iostream>
using namespace std;
template <typename key,typename value>
class BST {
    typedef class node {
    public:
        node(key i,value va):k(i),val(va),n(1),left(NULL),right(NULL) { }
        key k;
        value val;
        node *left, *right;
        int n;
    } *pnode;
    int size() const { return size(root); }
    int size(pnode x) { if (x = NULL) return 0; else return x.n; };
    void put(key k, value val) { root = put(root, k, val); }
    pnode put(pnode x, key k, value val);
    pair<bool, value> get(key k) { pnode temp = get(root, k); if (temp == NULL) return{ false,0 }; else return{ true,temp.val }; } 
    pnode get(pnode x, key k);
private:
    pnode root = NULL;
    int compare(key k1, key k2) { if (k1 < k2) return -1; else if (k1>k2) return 1; else return 0; }
};
template <typename key,typename value>
BST<key, value>::put(pnode x,key k, value val)->pnode //这一行报错了!!
{
    if (x = NULL) return new node(k, val);
    int cmp = compare(k, x.k);
    if (cmp < 0)
        x.left = put(x.left, k, val);
    else if (cmp>0)
        x.right = put(x.right, k, val);
    else
        x.val = val;
    x.n = size(x.left) + size(x.right) + 1;
    return x;
}
template <typename key, typename value>
BST<key, value>::get(pnode x, key k)->pnode //这一行报错了!!!
{
    if (x = NULL) return NULL;
    int cmp = compare(k, x.k);
    if (cmp < 0)
        return get(x.left, k);
    else if (cmp>0)
        return get(x.right, k);
    else
        return x;
}

下面是报错的截图(visual studio 2015):
图片说明

  • 写回答

4条回答 默认 最新

  • 纵横车 2015-08-05 05:09
    关注

    “->pnode”这是什么用法?没见过,难道是高级写法?
    “BST::get(pnode x, key k)”前面不要加返回值类型吗?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 朱传林 2015-08-05 04:52
    关注

    楼主代码copy过来编译通不过,错误很多。
    可能是编译器的原因;
    而且有部分超出了我的理解范围,菜鸟一个请不要介意。

    1)函数后面跟个->pnode是什么意思?
    2)非静态成员变量能这样初始化么?类在声明时是没有分配存储空间的,你这是定义吧?

    错误没找出来,反倒问了一堆,楼主勿怪。

    评论
  • fefe82 2015-08-05 06:21
    关注
         int size(pnode x) { if (x = NULL) return 0; else return x.n };
    

    应该是

    int size(pnode x) { if (x = NULL) return 0; else return x.n; }
    

    注意最后分号的位置。

    还有一个与你的问题无关的:

    if (x = NULL) 应该是 if (x == NULL) 吧

    评论
  • oyljerry 2015-08-05 07:19
    关注

    直接用auto

     auto BST<key, value>::put(pnode x,key k, value val)
    
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 k210显示failed init to model
  • ¥15 Evil-droid生成的APK手机已经下载但无法建立任务
  • ¥25 c语言韩信点兵的变式
  • ¥15 怎么根据书上的例子完成这个问题呢?
  • ¥15 ECharts 增加Zoom,整行包括右边的Text一起滑动
  • ¥15 关于网上一个easyx制作的见缝插针小游戏(c++)
  • ¥15 开地址法双散列函数处理碰撞
  • ¥15 想问一下这个是什么情况 虚拟机Linux打不开了
  • ¥15 联通光猫掉注册了怎么重新注册上去
  • ¥15 关于unity开发steamvr程序遇到的问题