Переопределение структуры C typedef, разные базовые типы

#struct #reference #typedef

#структура #ссылка #typedef

Вопрос:

Впервые публикую здесь. У меня проблема со ссылкой на структуру typedef из отдельных файлов. Пример:

main.c //объявление меню и переменных

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

person persondata[50] ;
  

person.h //структура typedef{…}person;

 typedef struct
{
    char name[50];
}person;
  

person.c //функции

 extern persondata[];

void copy()
{
    strcpy(persondata[0].name, "John");
}
  

Я продолжаю получать ошибку: слева от «.name» должен быть тип структуры / объединения и переопределение, разные базовые типы

Как я должен исправить эту ссылку?

Комментарии:

1. Это весь код? Вы #включаете «person.h» в свой файл person.c

Ответ №1:

Обычно вы делаете это #include "person.h" так, чтобы сделать объявление person видимым, а затем вы бы изменили объявление persondata на:

 extern person persondata[];
  

… т.е. укажите ее тип.

Комментарии:

1. Вам не нужно использовать ‘struct’

2. Спасибо, только что заметил это сам. Отредактировано соответствующим образом.

Ответ №2:

Написать

 extern person persondata[];
  

вместо этого.
Это должно сработать.

Если вы не зададите правильный тип, компилятор не будет знать, что persondata — это массив persons.

Ответ №3:

extern persondata[]; неявно эквивалентно extern int persondata[]; (компилятор предполагает int , что вы не указали тип). Вам нужно extern person persondata[]; .

Кроме того, компилятор должен иметь возможность видеть определение person лично.c, поэтому добавьте #include "person.h" в верхней части файла.

Комментарии:

1. у person.h нет объявления для persondata , поэтому внешнюю строку следует исправить, а не удалять (или объявление следует добавить в person.h).

Ответ №4:

Вам нужно:

 #include "person.h"
person persondata[10];