2
typedef struct{
    char name[25];
    int yearOfBirth;
    int district;
    char gender;
    int age;

    CitizenType *next;

}CitizenType;

Visual Studio でこの形式のリンク リストを作成しようとすると、構文に関連するあらゆる種類のエラーが発生します。(合計 102) しかし、CitizenType *next; をコメントアウトすると、エラーは発生しません。完全に宣言される前に構造を参照することに関係があることはわかっていますが、これを修正する方法がわかりません。

4

3 に答える 3

4

構造体の前に (構造体とは別に) typedef を宣言します。

typedef struct citizen_type CitizenType;

struct citizen_type {
    ...
    CitizenType *next;
};
于 2012-11-04T03:02:23.653 に答える
1

問題はそれです

CitizenType

構造体が終了した後でのみ、型の名前空間に入ります。

そのため、新しい型は宣言後にのみ使用できます。

以前の投稿のように、代わりに a struct name(構造体に名前を付ける) を使用するか、前に型を宣言して名前付きの構造体を宣言することができます。

于 2012-11-04T03:08:58.813 に答える
0

これを試して:

typedef struct node{
    char name[25];
    int yearOfBirth;
    int district;
    char gender;
    int age;

    struct node *next;

}CitizenType;

C の自己参照構造体の詳細については、このスタック オーバーフローの回答を確認してください。回答から:

CitizenType は、終わりのない再帰になるため、別の CitizenType を含めることはできません。

それが役に立てば幸い!

于 2012-11-04T03:02:03.700 に答える