【问题标题】:c binary tree insert function pointerc二叉树插入函数指针
【发布时间】:2014-05-19 08:31:42
【问题描述】:

我正在尝试制作一个二叉树程序,其中每个树节点都包含一个“库存”结构。

我目前在我的插入函数中遇到一个错误,导致编译失败。 我得到的错误是:

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;
}

【问题讨论】:

    标签: c pointers tree


    【解决方案1】:

    i 的类型是 inventory *,因此您应该将 i.invPartNo 替换为 (*i).invPartNo 或等效的 i-&gt;invPartNo 以解决您的错误。

    运算符. 适用于struct objects pointers to struct object。运算符 * 取消引用指针和取消引用类型相同 struct object 启用 . 在这里使用。但是(*i).memb 很吵,所以C language syntax 提供了与i-&gt;mem 相同的快捷方式。

    【讨论】:

    • 谢谢。这让我现在可以编译了。
    猜你喜欢
    • 2013-07-15
    • 2015-07-18
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 2014-09-19
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多