связывание файлов в c (множественное определение ...) - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь связать несколько файлов в c, и я получаю эту ошибку: «множественное определение createStudentList»

my main.c:

#include "students.h" 

int main(void) 
{  

  return 0;
}

student.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 ]

1 голос
/ 19 марта 2019

Из-за включений у вас есть функция createStudentList(), определенная в main.o и student.o , что приводит к ошибке компоновщика, которую вы наблюдаете.

Я бы предложил сделать следующее. Определение структуры (типа) и прототип функции должны находиться в заголовочном файле:

#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.

0 голосов
/ 19 марта 2019

Удалить #include "students.c" из Students.h. Из-за этого определение встречается дважды - один от student.h, а другой от Students.c - отсюда и конфликт.

Просто удалите вышеупомянутую строку, а также добавьте #include <stdbool.h> в ваш student.h. Сделайте эти изменения, и ваш код будет хорошо скомпилирован и скомпонован.

...