我正在尝试制作一个二叉树程序,其中每个树节点都包含一个“inventory”结构。
我当前在insert函数中遇到一个错误,导致编译失败。
我得到的错误是:

left of '.invPartNo' must have class/struct/union
type is 'inventory *'
did you intend to use '->' instead?

这些是我的结构:
//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 *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) //error here
    {
        node->right = Insert(node->right, i);
    }
    else if(i.invPartNo < node->data->invPartNo) //error here
    {
        node->left = Insert(node->left, i);
    }
    return node;
}

最佳答案

i的类型是inventory *,因此您应该将i.invPartNo替换为(*i).invPartNo或等效的i->invPartNo,以解决您的错误。
运算符.适用于struct objects而不适用于pointers to struct object。Operator*取消引用指针,取消引用的类型与此处启用struct object的用法的类型相同。但是.是nociy,因此(*i).memb提供了与C language syntax相同的快捷方式。

08-16 17:54