8

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;
4

3 に答える 3

18

コードでを使用している場合、まだ宣言していlist_t *nextないため、コンパイラは をどうするかわかりません。list_tこれを試して:

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

H2CO3 がコメントで指摘したように_t、識別子サフィックスとして使用することは良い考えではないため、使用しないでくださいlist_t

于 2013-09-03T00:33:18.603 に答える
1

なぜあなたはそれを自分自身に難しくし、ポインタとして設定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;
}
于 2013-09-03T00:36:41.197 に答える
0

これは、malloc を使用して構造体を作成することによるメモリ リークのリスクがない実際の例です。

#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;
}
于 2013-09-03T00:48:17.220 に答える