#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];