在成员分配结构中解引用指向结构不完整类型的指针

时间:2018-09-19 02:14:20

标签: c pointers struct

我遇到了有关指针和结构的问题。

#include<stdlib.h>
#include<stdio.h>

定义两个结构,子术语和主术语。

typedef struct{
    int sub_id;
    int sub_data;
    struct sub_term *next_term;
}sub_term;

typedef struct{
    char name[10];
    struct sub_term *init_term;
    struct sub_term *current_term;
}major_term;

我想创建一个包含子术语的主要术语。

int main(void){

major_term *Test_1;
Test_1 = (major_term *)malloc(sizeof(major_term));

Test_1->init_term = (sub_term *)malloc(sizeof(sub_term));   
Test_1->current_term = Test_1->init_term;

printf("Sub term 1 id : ");

但是,编译器注意到我在这一行中出现了[[Error]引用指向不完整类型的指针”。

scanf("%d",&Test_1->current_term->sub_id);

我是C语言的新手,不确定原因。 谢谢您的建议,可以使我的代码更好!

printf("Sub term 1 id : ",Test_1->current_term->sub_id);
printf("Sub term 1 data: ");
scanf("%d",&Test_1->current_term->sub_data);
printf("Sub term 1 data : ",Test_1->current_term->sub_data);    

return 0;
}

1 个答案:

答案 0 :(得分:4)

您需要结构的名称,而不仅仅是typedefs:

typedef struct sub_term{
//             ^^^^^^^^
    int sub_id;
    int sub_data;
    struct sub_term *next_term;
}sub_term;

typedef struct major_term{
//             ^^^^^^^^^^
    char name[10];
    struct sub_term *init_term;
    struct sub_term *current_term;
}major_term;

使用typedef定义类型名称

typedef struct {} MyType;

未使用名称MyType定义结构。而是将名称MyType定义为未命名结构的别名。

结构名称和通用类型名称位于C中的两个单独的命名空间中,因此struct MyTypeMyType不同,并且它们不会相互干扰。

当您声明一个结构而不定义它(即提供结构的内容)时,该结构是不完整的类型。在您的代码中,您定义了指向struct sub_term的指针,但未定义该结构(再次注意:typedef-ing不会为结构指定名称-它为您未命名的结构定义别名),因此编译器抱怨“类型不完整”。