簡體   English   中英

在 c 中為鏈表創建結構時出現錯誤 C2061

[英]error C2061 when making structs for linked lists in c

即使我嘗試切換結構的位置以便將它們聲明在正確的位置,也會繼續收到此錯誤。.. 似乎是正確的順序,但仍然收到此錯誤。 似乎是什么問題?

typedef struct YListNode {
    int Yval;
    YListNode *next;
}YListNode;

typedef struct YList {
    YListNode *head;
    YListNode *tail;
}YList;

typedef struct XListNode {
    XListNode * prev;
    int Xval;
    YList yList;
    XListNode *next;
}XListNode;

typedef struct List {
    XListNode *head;
    XListNode *tail;
}List;

struct定義的順序不是問題,而是與使用尚未定義的typedef來定義struct成員有關...

在此聲明中:

typedef struct YListNode {
    int Yval;
    YListNode *next;
}YListNode;

struct name (或struct tag )和structtypedef使用相同的符號 ( YListNode )。 這是一個問題,原因有兩個:

  • 首先是模棱兩可。 將來維護代碼將需要編碼人員額外注意正確應用這個多重定義的符號。

  • 第二個解決了您的具體問題,即在定義struct typedef ( YListNode ) 之前,不應在該struct的任何成員的定義中使用它。

CLANG編譯器中的此配置導致此錯誤:9、5 9, 5 error: must use 'struct' tag to refer to type 'YListNode'

為了解決這個問題:
為這些struct組件選擇不同的符號。 例如:

typedef struct yNode {
    int Yval;
    struct yNode *next;
}YListNode;

並且同樣適用於其他聲明。

或者使用以下放置在結構定義語句之前的前向聲明:

typedef struct YListNode YListNode;
typedef struct YList YList;
typedef struct XListNode XListNode;
typedef struct List List;

您可以使用前向聲明先聲明typedef struct ,然后再定義它們。

這里是:

    /* forward declaration */
    typedef struct YListNode YListNode;
    typedef struct YList YList;
    typedef struct XListNode XListNode;
    typedef struct List List;

    typedef struct YListNode {
        int Yval;
        YListNode *next;
    }YListNode;

    typedef struct YList {
        YListNode *head;
        YListNode *tail;
    }YList;

    typedef struct XListNode {
        XListNode * prev;
        int Xval;
        YList yList;
        XListNode *next;
    }XListNode;

    typedef struct List {
        XListNode *head;
        XListNode *tail;
    }List;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM