在 c 中链接文件(...的多重定义)
linking files in c( multiple definition of...)
我正在尝试 link c 中的一些文件,但出现此错误:
"multiple definition of createStudentList"
我的main.c:
#include "students.h"
int main(void)
{
return 0;
}
students.h:
#ifndef _students_h_
#define _students_h_
#include "students.c"
bool createStudentList();
#endif
students.c:
#include <stdbool.h>
typedef struct Students
{
int id;
double average;
} Student;
bool createStudentList()
{
return true;
}
由于包含,您在 main.o 和 student.o[= 中定义了函数 createStudentList()
25=],这会导致您观察到的链接器错误。
我建议执行以下操作。结构(类型)定义和函数原型应该进入头文件:
#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
从 students.h 中删除 #include "students.c"
。因此,定义出现了两次 - 一次来自 students.h,另一次来自 students.c - 因此发生了冲突。
只需删除上面提到的行并在 students.h 中添加 #include <stdbool.h>
。进行这些修改,您的代码将编译并且 link 正常。
我正在尝试 link c 中的一些文件,但出现此错误: "multiple definition of createStudentList"
我的main.c:
#include "students.h"
int main(void)
{
return 0;
}
students.h:
#ifndef _students_h_
#define _students_h_
#include "students.c"
bool createStudentList();
#endif
students.c:
#include <stdbool.h>
typedef struct Students
{
int id;
double average;
} Student;
bool createStudentList()
{
return true;
}
由于包含,您在 main.o 和 student.o[= 中定义了函数 createStudentList()
25=],这会导致您观察到的链接器错误。
我建议执行以下操作。结构(类型)定义和函数原型应该进入头文件:
#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
从 students.h 中删除 #include "students.c"
。因此,定义出现了两次 - 一次来自 students.h,另一次来自 students.c - 因此发生了冲突。
只需删除上面提到的行并在 students.h 中添加 #include <stdbool.h>
。进行这些修改,您的代码将编译并且 link 正常。