C 错误:取消引用指向不完整类型的指针,但对我来说一切都很好

C 错误:取消引用指向不完整类型的指针,但对我来说一切都很好,c,C,所以我对这个错误做了一些挖掘,我似乎无缘无故地得到了它(显然这不可能,所以我决定问) 在我的.h文件中,我声明 typedef struct setCDT *setADT; 在我的初始化中,我有 struct setCDT{ setElementT x[MaxVal]; int len; }; setADT setNew(){ setADT set; set=(setADT)malloc(sizeof *set); set->len=0;

所以我对这个错误做了一些挖掘,我似乎无缘无故地得到了它(显然这不可能,所以我决定问)

在我的.h文件中,我声明

typedef struct setCDT *setADT;
在我的初始化中,我有

struct setCDT{
    setElementT x[MaxVal];
    int len;
};

setADT setNew(){
    setADT set;
    set=(setADT)malloc(sizeof *set);
    set->len=0;
    return(set);
}
我会在代码的后面更改这些值,如果我需要发布这些值,我可以,但根据我的理解,这与我如何设置结构有关

在我的驱动程序中,我有
setADT A=setNew()但是当我调用
printf(“%d”,A->len)它抛出此错误


有什么想法吗?

在没有实际查看代码的情况下,分析这一点很困难,但我猜测包含以下行的文件:

printf("%d", A->len)
不是具有
struct setCDT
定义的文件;相反,它只包含带有

typedef struct setCDT *setADT;

如果要操作其他文件中的成员变量,需要将
struct setCDT
定义放在
.h
文件中。

在没有实际查看代码的情况下,分析这一点很困难,但我猜测包含以下行的文件:

printf("%d", A->len)
不是具有
struct setCDT
定义的文件;相反,它只包含带有

typedef struct setCDT *setADT;

如果要操作其他文件中的成员变量,则需要将
结构setCDT
定义放入
.h
文件中。

这似乎就是问题所在

 set=(setADT)malloc(sizeof *set);
应该是

 set=(setADT)malloc(sizeof(struct setCDT));

这似乎就是问题所在

 set=(setADT)malloc(sizeof *set);
应该是

 set=(setADT)malloc(sizeof(struct setCDT));

结构setCDT{…}部分在哪里声明?它应该在驱动程序#包含的.h文件中,否则编译器将不知道结构的内容应该是什么,并将给您一个“不完整类型”错误。SetElementT和MaxVal在哪里定义?您可以发布整个源代码吗?声明的结构setCDT{…}部分在哪里?它应该在驱动程序#包含的.h文件中,否则编译器将不知道结构的内容应该是什么,并将给您一个“不完整类型”错误。SetElementT和MaxVal在哪里定义?您能发布整个源代码吗?