неопределенная ссылка Clion для программы c - PullRequest
0 голосов
/ 15 февраля 2020

Я использую CLion, но когда я пытаюсь запустить свой файл struct. c, он всегда дает мне:

В функции main:

( местоположение файла) предупреждение: передача аргумента 1 ofdisplayAllEmployees из несовместимого типа указателя [-Wincompatible-pointer-types]

 displayAllEmployees(employees,cnt);
                     ^~~~~~~~~

В файле, включенном из

примечание: ожидается ЧЕЛОВЕК ** {aka struct person **}, но аргумент имеет тип ЛИЦО * {aka struct person *}

void displayAllEmployees (PERSON * employee [], int numberOfEmployees);

[100%] Связывание C исполняемая структура

В функции `main ':

неопределенная ссылка на` addEmployee'

undefined ссылка на `displayEmployee '

неопределенная ссылка на` displayAllEmployees'

collect2: error: ld вернул 1 состояние выхода

CMakeFiles / struct.dir / build.make: 94: рецепт для цели 'struct' не выполнен

make [3]: *** [struct] Ошибка 1

CMakeF iles / Makefile2: 178: рецепт для цели 'CMakeFiles / struct.dir / all' не выполнен

make [2]: *** [CMakeFiles / struct.dir / all] Ошибка 2

CMakeFiles / Makefile2: 190: рецепт для цели 'CMakeFiles / struct.dir / rule' не выполнен

make [1]: *** [CMakeFiles / struct.dir / rule] Ошибка 2

Makefile: 157: рецепт для цели 'struct' не выполнен

make: *** [struct] Ошибка 2

Я надеялся, что вы, ребята, сможете мне помочь. В CMakeLists.txt я установил исполняемый файл для person. c, а для struct. c отдельно. Для заголовочного файла я инициализировал функции, но всякий раз, когда я пытаюсь запустить файл struct. c, он всегда выдает ошибку.

Struct. c

    #include "person.h"

    int main(void)

    {
    int cnt;
    printf("How many employees? ");
    scanf("%d", &cnt);

    PERSON employees[cnt];

    for (int i = 0; i < cnt; i++)
    {
        PERSON employee;
        addEmployee(&employee);
        employees[i]= employee;
        printf("\n");
    }
    displayEmployee(&employees[0]);
    displayAllEmployees(employees,cnt);
    return 0;
}

person . c

    #include "person.h"
    #include <stdio.h>

    void addEmployee(PERSON *employee)

    {
    DATE mydate;
    printf("Enter info for next employee.\n");
    printf("Name : ");
    scanf("%s", employee->name);
    printf("Age : ");
    scanf("%d", &employee->age);
    printf("Height : ");
    scanf("f",&employee->height);

    printf("Enter DOB: ");
    printf("Enter month: ");
    scanf("%d", &mydate.month);
    printf("Enter day: ");
    scanf("%d", &mydate.day);
    printf("Enter your year: ");
    scanf("%d", &mydate.year);
    employee->birthday = mydate;

    }

    void displayEmployee(PERSON *employee)

    {
    printf("Name: %s\n", employee->name);
    printf("Age: %d\n", employee->age);
    printf("Height: .1%f\n", employee->height);
    printf("Birthday: %d/%d/%d", employee->birthday.month,employee->birthday.day,employee->birthday.year);

}

    void displayAllEmployees(PERSON *employees[], int numberOfEmployees)

    {
    for(int i=0; i< numberOfEmployees;i++)
    {
        displayEmployee(employees[i]);
        employees++;
    }
    printf("\n");
}

person.h

#ifndef PERSON_H

#define PERSON_H

#include <stdio.h>

typedef char NAME[41];
typedef struct date

{
int month;
int day;
int year;
}DATE;
typedef struct person{
NAME name;
int age;
float height;
DATE birthday;
}PERSON;

void addEmployee(PERSON *employee);
void displayEmployee(PERSON *employee);
void displayAllEmployees(PERSON *employees[], int numberOfEmployees);


#endif //PERSON_H

CMAKE:

cmake_minimum_required (ВЕРСИЯ 3.8)

проект (c_tut)

set (CMAKE_C_STANDARD 11)

SET (CMAKE_C_FLAGS "-m64 -g -O0 -D_DEBUG -Wall")

include_directories (ПОСЛЕ sr c)

add_executable (person src / person. c) add_executable (struct src / struct. c)

...