2013-09-02 6 views
3

Я пытаюсь создать простой связанный список в C. Я, кажется, получает сообщение об ошибке для этого кода:LinkedList Struct Typedef в C

typedef struct 
{ 
    char letter; 
    int number; 
    list_t *next; 
}list_t; 

char letters[] = {"ABCDEFGH"}; 

list_t openGame, ruyLopez; 
openGame.letter = letters[4]; 
openGame.number = 4; 
openGame.next = &ruyLopez; 


ruyLopez.letter = letters[5]; 
ruyLopez.number = 4; 
ruyLopez.next = NULL; 

Он не принимает мое определение в структурах:

list_t *next; 

И по той же причине он не будет принимать:

openGame.next = &ruyLopez; 
+1

Это не связано с Xcode. Что касается реальной проблемы: C не является C++. Вы должны ссылаться на тип структуры, используя ключевое слово 'struct', пока не будет установлено его определение, i. е. 'typedef struct list_t {... struct list_t * next; } '. Но об этом уже спрашивали и отвечали здесь прибл. 1038462475928745 раз. –

+3

О, и '_t' типы зарезервированы для использования с POSIX, загрязняя это« пространство имен », что приводит к неопределенному поведению. –

+1

@ H2CO3 [Referral Question/Answer] (http://stackoverflow.com/questions/3225386/if-i-do-a-typedef-in-c-or-c-when-should-i-add-t- at-the-end-of-typedefed) за вашу точку в именах типа '_t' suffixed type. – WhozCraig

ответ

6

при использовании list_t *next в коде, в compil er не знает, что делать с list_t, как вы еще не объявили об этом. Попробуйте это:

typedef struct list { 
    char letter; 
    int number; 
    struct list *next; 
} list; 

Как Н2СО3 отметил в комментариях, используя _t как суффикс идентификатора не отличная идея, так что не используйте list_t.

+0

Третья строка должна быть структурным списком * следующим по вашему коду. Кроме того, мы можем сделать следующий список списка struct.typedef; struct list { символ буквы; int number; список * next; }; –

+0

@AmarnathKrishnan, вы правы, конечно. исправленный. – verbose

+0

+1 для ответа –

0

почему вы сделали это трудно на себя просто установить openGame и ruzeLopez как указатели и вы не должны использовать & (это обычный способ использования связанных списков, просто не забудьте использовать -> для доступа пользователей)

попробуйте этот код вместо:

#include <stdlib.h> 
#include <malloc.h> 

typedef struct list 
{ 
    char letter; 
    int number; 
    struct list *next; 
}list; 

main(void) 
{ 
    char letters[] = "ABCDEFGH"; //what were the braces for ? 
    list *openGame, *ruyLopez; 
    openGame = ruyLopez = NULL; 
    openGame = malloc(sizeof(list)); 
    ruyLopez = malloc(sizeof(list)); 

    openGame->letter = letters[4]; 
    openGame->number = 4; 
    openGame->next = ruyLopez; 

    ruyLopez->letter = letters[5]; 
    ruyLopez->number = 5; 
    ruyLopez->next = NULL; 
} 
0

Вот рабочий пример без риска утечки памяти с помощью таНоса для создания структур.

#include <stdlib.h> 

typedef struct _list 
{ 
    char letter; 
    int number; 
    struct _list *next; 
} list_type; 

int main(void) 
{ 
    char letters[] = "ABCDEFGH"; //what were the braces for ? 
    list_type openGame, ruyLopez; 
    openGame.letter = letters[4]; 
    openGame.number = 4; 
    openGame.next = &ruyLopez; 

    ruyLopez.letter = letters[5]; 
    ruyLopez.number = 5; 
    ruyLopez.next = NULL; 
} 
Смежные вопросы