c树结构表达式必须具有类类型

c树结构表达式必须具有类类型,c,class,types,expression,C,Class,Types,Expression,我正在编写一个二叉树程序,其中每个节点都包含一个结构。作为指针新手,我不知道如何修复我遇到的这个错误 这些是我的结构: //inventory definition typedef struct inventory { char invName[36]; int invPartNo; int invQOH; float invUnitCost; float invPrice; }item; //tree definition struct btree

我正在编写一个二叉树程序,其中每个节点都包含一个结构。作为指针新手,我不知道如何修复我遇到的这个错误

这些是我的结构:

//inventory definition
typedef struct inventory
{
    char invName[36];
    int  invPartNo;
    int  invQOH;
    float invUnitCost;
    float invPrice;
}item;

//tree definition
struct btree {
    item *data;
    struct btree *left;
    struct btree *right;
} ;
在这两个函数中,我得到了“表达式必须有类类型”错误:

struct btree *binary_search(struct btree *tree, int data)
{
    if (tree==NULL) return NULL;
    else if (data == tree->data.invPartNo) //tree in this line is highlighted red with the error
        return tree;
    else if (data < tree->data.invPartNo) //tree in this line is highlighted red with the error
        return(binary_search(tree->left, data));
    else
        return(binary_search(tree->right, data));
}


btree *Insert(btree *node, inventory i)
{
    if(node == NULL)
    {
        btree *temp;
        temp = (btree *)malloc(sizeof(btree));
        temp->data = i;
        temp->left = temp->right = NULL;
        return temp;
    }
    if(i.invPartNo > node->data.invPartNo) //node is highlighted with error
    {
        node->right = Insert(node->right, i);
    }
    else if(i.invPartNo < node->data.invPartNo) //node is highlighted with error
    {
        node->left = Insert(node->left, i);
    }
    return node;
}
structbtree*二进制搜索(structbtree*树,int数据)
{
if(tree==NULL)返回NULL;
else if(data==tree->data.invPartNo)//此行中的树以红色突出显示,并显示错误
回归树;
else if(datadata.invPartNo)//此行中的树以红色突出显示,并显示错误
返回(二进制搜索(树->左,数据));
其他的
返回(二进制搜索(树->右,数据));
}
btree*插入(btree*节点,库存i)
{
if(node==NULL)
{
b树*温度;
温度=(btree*)malloc(sizeof(btree));
温度->数据=i;
临时->左=临时->右=空;
返回温度;
}
如果(i.invPartNo>node->data.invPartNo)//节点高亮显示并显示错误
{
节点->右侧=插入(节点->右侧,i);
}
否则,如果(i.invPartNodata.invPartNo)//节点高亮显示并显示错误
{
节点->左=插入(节点->左,i);
}
返回节点;
}

节点->数据
是指向
类型的指针,因此在尝试选择子字段时,
不适合它

您需要使用
->
,如
(节点->数据)->invPartNo

但我不完全确定为什么要将有效载荷分离到另一个结构(a)中。我可能会把它全部做成一个结构,然后使用指针的操作来重新构造树。换句话说,类似于:

struct btree {
  item data;           // Now it IS "node->data.something".
  struct btree *left;
  struct btree *right;
};


(a) 有时会有一些合理的原因,例如btree负载是另一个集合(如链表),或者您希望树能够存储任意数据类型。但是在这里,似乎只有一级间接寻址要简单得多,即树节点本身的间接寻址。

成员
data
是一个指针。在代码中有一些其他的不一致(比如使用<代码>清单>代码),你确定你在编程C而不是C++吗?另外,还有一些其他错误,我很惊讶您没有询问(比如将非指针结构分配给指针结构)。
data==(tree->data)->invPartNo
。毕竟
data
是节点中的指针,请不要强制转换
malloc
的返回值