C语言主函数使用头文件中的结构体,在链接时无法链接定义的该结构体。
该回答引用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"),而不是在实现文件中重新定义了头文件的内容,否则可能会导致多次定义错误。
不知道你这个问题是否已经解决, 如果还没有解决的话: