Eip_Nit_AC 2019-05-23 14:38 采纳率: 25%
浏览 3987
已结题

为什么p St b报错“表达式必须包含指向类的指针类型”?

#include<iostream>
#include<stdlib.h>
#define MaxSize 50

typedef int ElemType;
typedef struct Node *Position;
typedef Position BTNode;
struct Node
{
    ElemType data;
    struct node *lchild;
    struct node *rchild;
}b;

void CreateBTree(BTNode * &b, char*str)
{
    BTNode *St[MaxSize], *p;
    int top = -1, k, j = 0;
    char ch;
    b = NULL;
    ch = str[j];
    while (ch != '\0')
    {
        switch (ch)
        {
        case '(':top++; St[top] = p; k = 1; break;
        case')':top--; break;
        case',':k = 2; break;
        default:p = (BTNode *)malloc(sizeof(BTNode));
            p->data = ch;
            p->lchild = p->rchild = NULL;
            if (b == NULL)
                b = p;
            else
            {
                switch (k)
                {
                case 1:St[top]->lchild = p; break;
                case 2:St[top]->rchild = p; break;
                }
            }
        }
        j++;
        ch = str[j];
    }
}

图片说明
图片说明
其中p St b报错“表达式必须包含指向类的指针类型”
请问大佬们这是为什么呀?

  • 写回答

1条回答 默认 最新

  • 我叫侯万楼 2019-05-24 18:12
    关注

    typedef int ElemType;
    typedef struct Node *Position;
    typedef Position BTNode;
    struct Node
    {
    ElemType data;
    struct node *lchild;
    struct node *rchild;
    }b;
    粗略看了一下上面的应该等价于下面的
    typedef int ElemType;
    typedef struct Node
    {
    ElemType data;
    struct node *lchild;
    struct node *rchild;
    }*Position, *BTNode, Node;
    Node b;
    这个
    所以BTNode * p; 相当于Node **p,所以你就知道了(Node *)不是一个类,而是一个指针类型,你非要这么写的话可以试试(*p)->
    或者 BTNode p,建议“}*Position, *BTNode, Node;”改为“}*Position, BTNode, Node;”
    另外建议指针数组啥的该加的括号加上

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月10日

悬赏问题

  • ¥15 Marscode IDE 如何预览新建的 HTML 文件
  • ¥15 K8S部署二进制集群过程中calico一直报错
  • ¥15 java python或者任何一种编程语言复刻一个网页
  • ¥20 如何通过代码传输视频到亚马逊平台
  • ¥15 php查询mysql数据库并显示至下拉列表中
  • ¥15 freertos下使用外部中断失效
  • ¥15 输入的char字符转为int类型,不是对应的ascall码,如何才能使之转换为对应ascall码?或者使输入的char字符可以正常与其他字符比较?
  • ¥15 devserver配置完 启动服务 无法访问static上的资源
  • ¥15 解决websocket跟c#客户端通信
  • ¥30 Python调用dll文件输出Nan重置dll状态