从类型“ZipperTree”分配给类型“struct ZipperNode”时的类型不兼容
incompatible types when assigning to type ‘struct ZipperNode’ from type ‘ZipperTree’
所以,我在编译时遇到这个 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;
};
而且我认为这可能是我提出以下问题所需的全部内容:在 post 开始时可能导致错误的原因是什么?
感谢您的回答。
通过将 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
所以,我在编译时遇到这个 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;
};
而且我认为这可能是我提出以下问题所需的全部内容:在 post 开始时可能导致错误的原因是什么?
感谢您的回答。
通过将 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