在 C 中创建递归数据结构的方法

问题描述

假设我有一些可以引用自身的哈希图,例如:

typedef struct Person {
    char* name;
    Person* mother;
    Person* father;
} Person;
Person *Bob = malloc(sizeof(Person));
bob->name = "Bob";
bob->mother = Kathy;
bob->father = Bill;

解决 error: unknown type name ‘Person’ 错误的建议方法是什么?

解决方法

Person 尚未定义,因为 typedef 仅在分号结束后才生效。要从自身内部引用结构,请使用 struct Person。以下代码在 GCC 10.2.0 上编译没有错误。

typedef struct Person {
    char* name;
    struct Person* mother;
    struct Person* father;
} Person;

int main() {
    Person Kathy = { "Kathy",NULL,NULL };
    Person Bill = { "Bill",NULL };
    Person Bob = { "Bob",&Kathy,&Bill };
    return 0;
}
,

问题是结构定义中使用的名称 Person 作为数据成员母亲和父亲的类型说明符

typedef struct Person {
    char* name;
    Person* mother;
    Person* father;
} Person;

尚未声明。

或者在结构定义之前使用 typedef,如

typedef struct Person Person;

struct Person{
    char* name;
    Person* mother;
    Person* father;
};

或者在结构定义中使用声明的结构标签,如

typedef struct Person {
    char* name;
    struct Person* mother;
    struct Person* father;
} Person;
,

虽然 typedef 未定义,但 struct 标记是这样您可以将其添加到 struct 的元素中。例如:

typedef struct Person {
    char* name;
    struct Person* mother;
    struct Person* father;
} Person;
#include <stdlib.h>

int main(void) {

    // parents (ignore their parents)
    Person *Kathy = malloc(sizeof(Person));
    Kathy->name = "Kathy";
    Person *Bill = malloc(sizeof(Person));
    Bill->name = "Bill";

    // person
    Person *Bob = malloc(sizeof(Person));
    Bob->name = "Bob";
    Bob->mother = Kathy;
    Bob->father = Bill;

    printf("Name: %s | Mom: %s,Dad: %s\n",Bob->name,Bob->mother->name,Bob->father->name
    free(Bob); free(Kathy); free(Bill);

}

姓名:鲍勃 |妈妈:凯西,爸爸:比尔

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...