0

我试图在 c 中链接一些文件并且我得到这个错误:“createStudentList 的多重定义”

我的 main.c:

#include "students.h" 

int main(void) 
{  

  return 0;
}

学生.h:

#ifndef _students_h_
#define _students_h_
#include "students.c" 

bool createStudentList();
#endif

学生.c:

#include <stdbool.h>
typedef struct Students
{
  int id;
  double average;
} Student;

bool createStudentList()
{
  return true; 
}
4

2 回答 2

2

由于包含,您在main.ostudent.ocreateStudentList()中都定义了函数,这会导致您观察到链接器错误。

我建议执行以下操作。结构(类型)定义和函数原型应该进入头文件:

#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; 
}

现在您可以createStudentList通过包含students.h.

于 2019-03-19T13:17:27.677 回答
0

从 student.h 中删除#include "students.c"。因此,该定义出现了两次——一次来自students.h,另一次来自students.c——因此发生了冲突。

只需删除上述行并添加#include <stdbool.h>您的students.h。进行这些修改,您的代码将编译和链接正常。

于 2019-03-19T13:26:26.143 回答