gpt4 book ai didi

c - 从类型 ‘struct ZipperNode’ 分配给类型 ‘ZipperTree’ 时的类型不兼容

转载 作者:太空宇宙 更新时间:2023-11-04 04:36:41 25 4
gpt4 key购买 nike

因此,我在编译时遇到了这个 gcc 编译错误:

zipper.c: In function ‘fillZipperInfo’: zipper.c:384:22: error: incompatible types when assigning to type ‘struct ZipperNode’ from type ‘ZipperTree’ forest[current++] = n;

这是“zipper.h”文件中的不透明类型定义:

typedef struct ZipperNode *ZipperTree;

这里是“zipper.c”文件中的 ZipperNode 定义:

struct ZipperNode {
int count;
ZipperTree left;
ZipperTree right;
Symbol symbol;
};

以及调用错误的周围部分:

ZipperTree forest = malloc(sizeof(ZipperTree) * ft->total);
int current = 0;
int i;
for(i = 0; i < ft->size; i++) {
if(ft->symbols[i] > 0) {
ZipperTree n = malloc(sizeof(ZipperTree));
n->count = ft->symbols[i];
n->symbol = i;
forest[current++] = n; //here!!
}
}

这里是 ft 类型,FreqTable,以防万一,它也在“zipper.h”上预定义:

struct FreqTable {
int symLength;
size_t size;
Symbol* symbols;
int total;
};

我认为这可能是我提出以下问题所需的全部内容:可能导致帖子开头出现错误的原因是什么?

感谢您的回答。

最佳答案

通过将 ZipperTree 类型替换为 ZipperNode * 可以更容易地看出问题所在

ZipperNode *forest = malloc(sizeof(ZipperNode *);
ZipperNode *n = malloc(sizeof(ZipperNode *));
forest[current++] = n;

forest[current++] 是您的左值,在索引时,它将成为指向的值,ZipperNode,而不是 ZipperNode * 这就是你的右值。

用 clang 编译会提供更多信息,但最终它会提示同样的事情。

error: assigning to 'struct ZipperNode' from incompatible type 'ZipperTree'
(aka 'struct ZipperNode *'); dereference with *
forest[current++] = n; //here!!
^ ~
*

您正在将指针分配给非指针类型。尝试取消引用 n

关于c - 从类型 ‘struct ZipperNode’ 分配给类型 ‘ZipperTree’ 时的类型不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30006042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com