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 回答