2015-05-27 2 views
0

Я хочу, чтобы моя структура была рекурсивной. Так что я сделал до сих пор выглядит следующим образом:Определение рекурсивной структуры в C, ошибка «форвардная декларация»

typedef struct { 

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

Но когда я затем попытаться инициализировать его следующим образом:

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 ******** 
} 

Я получаю ошибку: »./structurs.h:27: 13: примечание: вперед декларация "структура my_struct"

так же как это ошибка на отмеченной линии: main.c: 56: 22: ошибка: неполное определение типа '' STRUCT my_struct

Кто-нибудь сейчас, где моя ошибка?

+0

(кроме typedef) использование 'strncpy()' неверно. (использование strncpy() ** всегда ** неправильно) – wildplasser

ответ

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; 
}; 
+0

Я слепой -.- !! Большое спасибо! – malajedala

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 показал и затем ЬурейиЙ для структуры

0

В коде

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

не определит struct называется struct my_struct, скорее, это typedef s my_struct быть псевдонимом из безымянных структуры. Таким образом, вы не можете использовать struct my_struct в своем коде. Либо

Либо

  • Вы должны поместить typedef до структуры definiion.

или

  • Вы должны использовать имениstruct.
Смежные вопросы