Search code examples
clinkercfilehfile

linking files in c( multiple definition of...)


Im trying to link a few files in c and im getting this erorr: "multiple definition of createStudentList"

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

Solution

  • Due to the includes, you have the function createStudentList() defined in both main.o and student.o, which leads to the linker error you observe.

    I would suggest to do the following. The structure (type) definition and function prototype should go into the header file:

    #ifndef _students_h_
    #define _students_h_
    
    #include <stdbool.h>
    
    typedef struct Students
    {
      int id;
      double average;
    } Student;
    
    
    bool createStudentList(void);
    #endif
    

    and the actual code in the sourcefile, which includes the headerfile

    #include "students.h"
    
    bool createStudentList(void)
    {
      return true; 
    }
    

    Now you can use both the type and the function createStudentList in other source files by including students.h.