C语言主函数使用头文件中的结构体,在链接时无法链接定义的该结构体,如何解决?

C语言主函数使用头文件中的结构体,在链接时无法链接定义的该结构体。

img

该回答引用ChatGPT

如果在链接时无法找到定义的结构体,通常是因为头文件中只有结构体的声明,而没有定义,导致编译器无法将该结构体实例化。解决这个问题的方法有以下两种:

1、在头文件中定义结构体
将结构体的定义也放在头文件中,这样可以保证结构体在被使用时已经定义了,从而避免链接错误。例如,假设定义了一个结构体person,则头文件中可以这样写:

#ifndef PERSON_H
#define PERSON_H

typedef struct {
    int age;
    char name[100];
} person;

#endif

在主函数中包含该头文件即可使用person结构体。

2、在实现文件中包含头文件并定义结构体
如果不能将结构体的定义放在头文件中,也可以在实现文件中包含头文件,并在实现文件中定义结构体。例如,如果头文件person.h中只有结构体的声明,那么在实现文件person.c中可以这样写:


#include "person.h"

struct person {
    int age;
    char name[100];
};

/* 在这里定义 person 结构体的函数实现 */

这样在实现文件中定义的person结构体会覆盖头文件中的声明,从而可以正常编译链接。

需要注意的是,如果使用了第二种方法,需要确保在包含头文件时使用了头文件的实际名称(例如#include "person.h"),而不是在实现文件中重新定义了头文件的内容,否则可能会导致多次定义错误。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^