Переопределение структуры типа C, различные базовые типы - PullRequest
0 голосов
/ 01 мая 2011

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

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

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

person persondata[50] ;

person.h // typedef struct {...} person;

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

person.c // functions

extern persondata[];

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

Я получаю сообщение об ошибке: слева от ".name" должен быть тип struct / union и переопределение, различные базовые типы

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

Ответы [ 4 ]

2 голосов
/ 01 мая 2011

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

extern person persondata[];

... т.е. укажите его тип.

1 голос
/ 01 мая 2011

запись

extern person persondata[];

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

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

1 голос
/ 01 мая 2011

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

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

0 голосов
/ 01 мая 2011

Вам нужно:

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