Je m'excuse si cela a déjà été demandé.
Je reçois l'erreur suivante lors de la compilation avec make:
.../inc/intModIp.h:418: error: field 'cnc_id' has incomplete type
../inc/intModIp.h:419: error: field 'cnc_key' has incomplete type
../inc/intModIp.h:421: error: field 'fin_id' has incomplete type
../inc/intModIp.h:422: error: field 'fin_key' has incomplete type
../inc/intModIp.h:424: error: field 'remote_id' has incomplete type
../inc/intModIp.h:426: error: field 'cnc_ipsec_peer' has incomplete type
../inc/intModIp.h:427: error: field 'fin_ipsec_peer' has incomplete type
../inc/intModIp.h:428: error: field 'remote_ipsec_peer' has incomplete type
../inc/intModIp.h:430: error: field 'cnc_link' has incomplete type
../inc/intModIp.h:431: error: field 'cnc_esp' has incomplete type
../inc/intModIp.h:433: error: field 'fin_link' has incomplete type
../inc/intModIp.h:434: error: field 'fin_esp' has incomplete type
Le code respectif dans le fichier d’en-tête est le suivant:
#if 1 || defined(SYMB_IPSEC)
struct ipsec_state {
int enabled;
int active;
int timer;
/* IPSEC_SOCKET_STATES */
struct ipsec_id cnc_id;
struct ipsec_priv_key cnc_key;
struct ipsec_id fin_id;
struct ipsec_priv_key fin_key;
struct ipsec_id remote_id;
struct ipsec_peer cnc_ipsec_peer;
struct ipsec_peer fin_ipsec_peer;
struct ipsec_peer remote_ipsec_peer;
struct ipsec_ike_link cnc_link;
struct ipsec_esp_sa cnc_esp;
struct ipsec_ike_link fin_link;
struct ipsec_esp_sa fin_esp;
} ipsec;
#endif
quelqu'un pourrait-il m'aider s'il vous plaît avec cela. S'il vous plaît laissez-moi savoir si d'autres informations sont nécessaires.
Merci, .__ ensoleillé
Le problème pourrait être que toutes ces structures sont déclarées en avant.
L'en-tête est-il inclus après struct ipsec_state
?:
/ * a.h * /
struct a {
int i;
};
/ * demo.c * /
struct b {
struct a A;
};
#include "a.h"
int main(void)
{
return 0;
}
Sortie:
david@debian:~$ gcc -std=c99 -Wall -pedantic -W -Wextra -o demo demo.c
demo.c:2:11: error: field ‘A’ has incomplete type
Le compilateur ne peut pas trouver les définitions de structure indiquées (ipsec_id
... ipsec_esp_sa
), vous devrez peut-être inclure des fichiers d'en-tête associés
mettre le pointeur pour le membre de la structure.
struct ipsec_state {
int enabled;
int active;
int timer;
/* IPSEC_SOCKET_STATES */
struct ipsec_id *cnc_id;
struct ipsec_priv_key *cnc_key;
struct ipsec_id *fin_id;
struct ipsec_priv_key *fin_key;
struct ipsec_id *remote_id;
struct ipsec_peer *cnc_ipsec_peer;
struct ipsec_peer *fin_ipsec_peer;
struct ipsec_peer *remote_ipsec_peer;
struct ipsec_ike_link *cnc_link;
struct ipsec_esp_sa *cnc_esp;
struct ipsec_ike_link *fin_link;
struct ipsec_esp_sa *fin_esp;
} ipsec;
#endif
L'une des sources de cette erreur (champ de type incomplet) est lorsque vous utilisez le mot-clé struct devant un alias (une variable définie via typedef). Essayez de supprimer le mot clé struct.