2013-06-11 2 views
1

저는 F1 경주를 시뮬레이트하는 C 프로그램을 유닉스에서하고 있습니다. 내 구조체에 문제가 있으며 문제를 식별 할 수 없습니다.컴파일 할 때 예기치 않은 오류가 발생했습니다.

void initContaineur(Containeur * x, int NumVoiture, int TypeDeSeance, DonneesPartagees * Voiture, DonneesPartagees * Session, DonneesPartagees * CompressionTemporelle, Voiture ** Rang) 
{ 
x->NumVoiture = NumVoiture; 
x->TypeDeSeance = TypeDeSeance; 
x->Voiture = Voiture; 
x->Session = Session; 
x->CompressionTemporelle = CompressionTemporelle; 
x->Rang = Rang; 
} 

오류가

을 말한다

나의 첫번째 구조체 :

typedef struct { 
int NumVoiture; /* numéro de la voiture : 1..24 Ne pas oublier d'ajouter 1 si number >= 13 lors de l'affichage */ 
int Status; /* le statut de la voiture, ARRETCOURT, Abandon, etc... */ 
int TourActuel; /* le numéro du tour actuel de la voiture */ 
int SecteurActuel; /* le numéro du secteur actuel de la voiture (0..2) */ 
TempsDuTour TempsDuTour; /* le temps du tour courant */ 
TempsDuTour MeilleurTour; /* le meilleur de temps de la séance pour cette voiture */ 
TempsDuTour MeilleursSecteurs; /* chaque meilleur secteur de la séance pour cette voiture */ 
struct timeval HeureFinSecteur[NBSECTEURS]; /* heure de passage à la fin de chaque secteur */ 
struct timeval HeureDebutSecteur; /* heure (précision à la microsec) au début d'un secteur, voir timeval sur le net */ 
} Voiture; 

그리고 내 두 번째 구조체 : 그 기능을 사용하려고 할 때

typedef struct 
{ 
int NumVoiture; 
int TypeDeSeance; 
DonneesPartagees * Voiture; 
DonneesPartagees * Session; 
DonneesPartagees * CompressionTemporelle; /* compression temporelle */ 
Voiture ** Rang; /* tableau de pointeurs */ 
} Containeur; 

문제가 나타납니다

expected declaration specifiers or '...' before 'Voiture' 

"Voiture * Rang [NBVOITURES];"라고 말하면 두 번째 오류가 발생합니다. main()

'Rang' undeclared (first use in this function) 

미리 감사드립니다!

+6

당신은 타입 필드와 구조 필드로 모두'Voiture'를 가지고 있습니다. –

+1

@MarceloCantos : 허용됩니다 : 구조체 필드는 다른 식별자와는 별도의 네임 스페이스에 있습니다. jwodder가 말했듯이 그 문제는이 코드가 타입 식별자 사용과 충돌하는 변수 이름으로 사용하려고한다는 것입니다. – ruakh

+0

@ruakh : 나는 타당성에 대해서는 확신하지 못했다. 그러나 그럼에도 불구하고 극도로 모호한 습관이다. –

답변

3

첫 번째 typedef는 Voiture을 유형 이름으로 사용하지만 initContainer에있는 매개 변수의 이름으로 Voiture을 사용하려고합니다. 분명히 이것은 문제를 일으키며, 그 중 하나의 이름을 바꾸어야합니다.

+1

+1하지만 "분명히"말하지는 않습니다. 유형 식별자와 변수 이름이 별도의 네임 스페이스에있는 많은 언어가 있습니다. (그리고 심지어 C 언어에서도'Voiture'라는 변수와 함께'struct Voiture'를 사용하는 것이 안전 할 것입니다.) – ruakh

+0

분명하지 않습니까? 내 문제를 해결합니다! 고마워요! – tomatediabolik

관련 문제