2011-05-01 2 views
0

Pour la première fois ici. J'ai un problème de référencement d'une structure typedef à partir de fichiers séparés. Exemple:C typedef struct redéfinition, différents types de base

main.c // menus et variables Déclaration

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

person persondata[50] ; 

Person.h // typedef struct personne {...};

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

person.c // fonctions

extern persondata[]; 

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

Je continue à obtenir l'erreur: à gauche de ".name" doivent avoir le type struct/union et redéfinition, différents types

Comment suis-je censé réparer cette référence?

+0

Est-ce tout le code? Avez-vous #include "person.h" dans votre fichier person.c h – nos

Répondre

1

Ecrire

extern person persondata[]; 

à la place. Cela devrait faire l'affaire.

Si vous ne lui donnez pas le type correct, le compilateur ne saura pas que persondata est un tableau de personnes.

1

extern persondata[]; est implicitement équivalent à extern int persondata[]; (le compilateur suppose int si vous ne spécifiez pas un type). Vous avez besoin de extern person persondata[];.

En outre, le compilateur doit être capable de voir la définition de person en personne.c, alors ajoutez #include "person.h" en haut du fichier.

+0

personne.h n'a pas de déclaration pour 'persondata', donc la ligne externe devrait être corrigée plutôt que supprimée (ou la déclaration devrait être ajoutée à la personne. h). – davmac

+0

@davmac: En effet, j'ai déjà corrigé ma réponse ... –

+0

alors vous obtenez un upvote de ma part. – davmac

2

Généralement, vous #include "person.h" afin de faire la déclaration de person visible, et vous changerait la déclaration persondata à:

extern person persondata[]; 

... à savoir préciser son type.

+0

Vous n'avez pas besoin d'utiliser 'struct' –

+0

Merci, vient de remarquer que moi-même. Edité en conséquence. – davmac

0

Vous devez:

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