2013-06-11 195 views
1

我正在Unix中做一個模擬F1比賽的C程序。 我的結構中有一個問題,我無法確定問題。編譯時出現意外錯誤

我的第一個結構:

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; 

我的第二個結構:

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; 
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]時出現第二個錯誤; ()

'Rang' undeclared (first use in this function) 

在此先感謝!

+6

你有'Voiture'作爲一個類型和一個結構字段。 –

+1

@MarceloCantos:這是允許的:結構字段位於與其他標識符不同的名稱空間中。正如jwodder在他/她的回答中所說的那樣,這個問題是這段代碼試圖將它作爲一個變量名來使用,這與類型標識符的使用相沖突。 – ruakh

+0

@ruakh:我不確定有效性,但它是一個非常可疑的做法。 –

回答

3

您的第一個typedef使Voiture成爲類型的名稱,但在initContainer中,您嘗試使用Voiture作爲參數的名稱。顯然,這會導致問題,您需要重命名其中的一個。

+1

+1,但我不會說「明顯」。有許多語言的類型標識符和變量名位於不同的名稱空間中。 (即使在C語言中,將'struct Voiture'和一個名爲'Voiture'的變量結合在一起也是安全的。) – ruakh

+0

顯然與否,解決了我的問題!非常感謝 ! – tomatediabolik