2013-02-13 3 views
0

J'ai trouvé une implémentation d'AES pour un projet que je fais. Cependant, lorsque je l'intègre, je reçois les erreurs suivantes pendant la construction.lors de l'exécution. Types conflictuels et déclaration précédente

In file included from ff.h:26:0, 
      from disp.h:4, 
      from main.c:14: 
aes.h:14:3: error: conflicting types for 'AesCtx' 
aes.h:14:3: note: previous declaration of 'AesCtx' was here 
aes.h:28:5: error: conflicting types for 'AesCtxIni' 
aes.h:28:5: note: previous declaration of 'AesCtxIni' was here 
aes.h:29:5: error: conflicting types for 'AesEncrypt' 
aes.h:29:5: note: previous declaration of 'AesEncrypt' was here 
aes.h:30:5: error: conflicting types for 'AesDecrypt' 
aes.h:30:5: note: previous declaration of 'AesDecrypt' was here 

Le fichier d'en-tête est lui-même:

// AES context structure 
typedef struct { 
unsigned int Ek[60]; 
unsigned int Dk[60]; 
unsigned int Iv[4]; 
unsigned char Nr; 
unsigned char Mode; 
} AesCtx; 

// key length in bytes 
#define KEY128 16 
#define KEY192 24 
#define KEY256 32 
// block size in bytes 
#define BLOCKSZ 16 
// mode 
#define EBC 0 
#define CBC 1 

// AES API function prototype 

int AesCtxIni(AesCtx *pCtx, unsigned char *pIV, unsigned char *pKey, unsigned int KeyLen, unsigned char Mode); 
int AesEncrypt(AesCtx *pCtx, unsigned char *pData, unsigned char *pCipher, unsigned int DataLen); 
int AesDecrypt(AesCtx *pCtx, unsigned char *pCipher, unsigned char *pData, unsigned int CipherLen); 

puis le fichier C respectif utilise.

int AesCtxIni(AesCtx *pCtx, unsigned char *pIV, unsigned char *pKey, unsigned int KeyLen, unsigned char Mode) 
{ 
    // Cut out code for brevity 
} 

int AesEncrypt(AesCtx *pCtx, unsigned char *pData, unsigned char *pCipher, unsigned int DataLen) 
{ 
    // Cut out code for brevity 
} 

int AesDecrypt(AesCtx *pCtx, unsigned char *pCipher, unsigned char *pData, unsigned int CipherLen) 
{ 
    // Cut out code for brevity 
} 

Je sais que ces erreurs se produisent généralement parce que soit la fonction n'a pas été pré-déclarée ou parce qu'elle est légèrement différente de la déclaration de, mais je ne peux pas voir une différence.

Des idées?

Répondre

4

Quel compilateur utilisez-vous? Ma meilleure supposition que cela essaie de dire aes.h est d'être #include d deux fois. Essayez d'ajouter des gardes d'en-tête au début et à la fin de la aes.h:

#ifndef AES_H_ 
#define AES_H_ 

typedef struct { 
... 
int AesDecrypt(AesCtx *pCtx, unsigned char *pCipher, unsigned char *pData, unsigned int CipherLen); 

#endif /* !AES_H_ */ 
+0

Merci beaucoup c'était ce problème. C'est bête je n'ai pas remarqué, tous les autres fichiers d'en-tête du projet ont cette garde. – IainS

Questions connexes