阿拉垮神登 2023-02-26 10:55 采纳率: 100%
浏览 49
已结题

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

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

img

  • 写回答

2条回答 默认 最新

  • CodeBytes 2023-02-26 11:01
    关注

    该回答引用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"),而不是在实现文件中重新定义了头文件的内容,否则可能会导致多次定义错误。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月6日
  • 已采纳回答 2月26日
  • 创建了问题 2月26日