我试图在 c 中链接一些文件,我得到这个 erorr: "创建学生列表的多重定义">
我的主线:
#include "students.h"
int main(void)
{
return 0;
}
学生.h:
#ifndef _students_h_
#define _students_h_
#include "students.c"
bool createStudentList();
#endif
学生网:
#include <stdbool.h>
typedef struct Students
{
int id;
double average;
} Student;
bool createStudentList()
{
return true;
}
由于包含,您在main.o和student.o中都定义了函数createStudentList()
,这会导致您观察到的链接器错误。
我建议做以下几点。结构(类型)定义和函数原型应放入头文件中:
#ifndef _students_h_
#define _students_h_
#include <stdbool.h>
typedef struct Students
{
int id;
double average;
} Student;
bool createStudentList(void);
#endif
以及源文件中的实际代码,其中包括头文件
#include "students.h"
bool createStudentList(void)
{
return true;
}
现在,您可以通过包含students.h
来同时使用其他源文件中的类型和函数createStudentList
。
从学生中删除#include "students.c"
.h.正因为如此,定义出现了两次 - 一次来自学生.h,另一次来自学生.c - 因此发生了冲突。
只需删除上述行,并在您的学生中添加#include <stdbool.h>
.h。进行这些修改,您的代码将编译和链接正常。