2010-08-02 6 views
-1

Je suis confronté à un problème bizarre que je l'ai défini I une structure dans un fichier d'en-tête C:typedef problème stuct en C

typedef struct iRecActive{ 

    char iRecSID[32]; 
    unsigned char RecStatus; 
    int curSel; 

}iRecAcitve_t; 

mais quand j'utilise la même structure dans un autre fichier, le compilateur ne reconnaît pas la structure même si j'ai vérifié que j'ai inclus son fichier d'en-tête. Voici l'erreur:

: erreur C2065: 'iRecActive_t': identificateur non déclaré

Voici le code complet du fichier où j'ai défini la structure

#ifndef _TS_HTTP_APPLICATION_H_ 
#define _TS_HTTP_APPLICATION_H_ 

#ifdef __cplusplus 
extern "C" 
{ 
#endif 

typedef struct iRecActive{ 

    char iRecSID[32]; 
    unsigned char RecStatus; 
    int curSel; 

}iRecAcitve_t; 

int startHTTPServer(int HTMLserverPort); 
int closeHTTPServer(); 

int openTS_SegmenterN(); 
void pushTSDataN(unsigned char* TSData, int len); 
void closeTS_SegmenterN(); 

void removeAllConnections(); 

#ifdef __cplusplus 
} 
#endif 

#endif 
+3

Notez que vous ne devez pas utiliser le suffixe '_t' pour votre propre types/structures/classes. – PeterK

+0

mieux utiliser un nom différent pour l'étiquette typedef et celle de la structure elle-même. – KedarX

Répondre

4

changement iRecAcitve_t-iRecActive_t.

+0

cela peut encore fonctionner si l'auteur utilise iRecAcitve_t pour créer l'instance de la structure typedef? – KedarX

+0

Merci beaucoup, vous avez littéralement scanné mon code. Et je suis un absurde: D Encore une fois merci – Omayr

+0

@Kedar, oui mais si le code fait déjà référence à iRecActive_t, il est plus facile de changer la déclaration. –

0

J'ai essayé de trouver une solution pour un problème similaire, mais je ne l'ai pas trouvé sur la pile. Je laisse ici répondre pour d'autres personnes, pour gagner leur temps:

Parce que c'est C, vous ne pouvez pas créer vos variables où vous voulez. Ils doivent être créés au début de la déclaration. Donc, cela est correct:

if(true) { 
    iRecActive_t myRecActive; 
    //calculations 
    Mutex_Lock(somemutext); 
    variable = 14; 

Et ceci est incorrect:

if(true) { 
    //calculations 
    Mutex_Lock(somemutext); 
    variable = 14; 
    iRecActive_t myRecActive; 

En dernier exemple, vous obtenez un message d'erreur: utilisation illégale de ce type que l'expression ou d'autres erreurs similaires, très utiles. Une bonne question

est ici, mais il a été marqué comme double emploi (ce n'est pas!): typedef stuct problem in C (illegal use of this type as an expression)

Cordialement, Ikeban

+0

C'est exactement la même question, juste poster un message d'erreur différent et comme écrit confus la merde des gens .. Votre réponse serait une réponse potentielle à la question qu'il aurait dû poser là, mais n'est pas une réponse à la question de cette question . (c.-à-d. rien de mal avec les aspects techniques de ce que vous avez fourni juste des problèmes de placement principalement causés par OP) – UpAndAdam