我正在尝试制作一个二叉树程序,其中每个树节点都包含一个“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
相同的快捷方式。