C中的递归结构定义,错误“前向声明”

时间:2015-05-27 11:55:00

标签: c recursion

我想将我的结构声明为递归结构。所以我到现在所做的事情看起来像这样:

my_struct *alig;
alig = malloc(sizeof(my_struct)*1);
alig->child_num = 5;
alig->string = malloc(sizeof(char)*9);
strncpy(alig->string, "AAACGTCA", 8);

alig->children = malloc(sizeof(my_struct*)*alig->child_num);

int j;
for (j = 0; j < alig->child_num; j++) {
    alig->children[j] = malloc(sizeof(my_struct)*1);
    alig->children[j]->string = malloc(sizeof(char)*9); // *********error ********
}

但是当我尝试像这样初始化它时:

**articles**
articlesID | categoriesID | languagesID | Title | Price

**categories**
categoriesID | Name

**languages**
languagesID | Name

我收到错误: “./structurs.h:27:13:注意:'struct my_struct'的前向声明”

以及标记行处的此错误: main.c:56:22:错误:类型'struct my_struct'

的定义不完整

有人现在我的错误在哪里吗?

3 个答案:

答案 0 :(得分:6)

您的代码中没有struct my_struct,您的struct是匿名typedef,您需要它是这样的

typedef struct my_struct {
     char *string;
     struct my_struct **children;
     int child_num;
} my_struct;

甚至

typedef struct my_struct my_struct;
struct my_struct {
     char *string;
     my_struct **children;
     int child_num;
};

答案 1 :(得分:0)

 typedef struct {

 char *string;
 struct my_struct **children; //I want a list of children, therefore pointer to pointer
 int child_num;
 } my_struct;

应该是

 typedef struct my_struct{

 char *string;
 struct my_struct **children; //I want a list of children, therefore pointer to pointer
 int child_num;
 } my_struct;

正如 @iharob 所说,你的代码中没有结构my_struct,编译器抱怨它你首先有一个my_struct显示的结构,然后你的struct有一个typedef < / p>

答案 2 :(得分:0)

在您的代码中

typedef struct {
 char *string;
 struct my_struct **children; 
 int child_num;
 } my_struct;

定义名为struct的{​​{1}},而struct my_struct s typedef未命名的别名结构。因此,您无法在代码中使用my_struct。任

无论

  • 您需要将struct my_struct放在结构定义之前。

  • 您需要使用名为 typedef