在c中链接文件(...的多个定义)

时间:2019-03-19 13:11:41

标签: c linker cfile hfile

我正在尝试在c中链接一些文件,并且我得到了这个错误提示: “ 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; 
}

2 个答案:

答案 0 :(得分:1)

由于包含,您在 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; 
}

现在,您可以通过包含createStudentList在其他源文件中使用类型students.h和功能。

答案 1 :(得分:0)

从学生中删除await。h。因此,定义出现了两次-一个来自students.h,另一个来自students.c-因此发生了冲突。

只需删除上述行,并在学生中添加#include "students.c"。h。进行这些修改,您的代码将可以编译和链接。