Я использую 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)