Error: Dereferencing pointer...
Par Cédric Tabin le mercredi 24.06.2009, 08:00 - C/C++ - Lien permanent
En bossant sur un (petit) programme C, je suis tombé sur le message d'erreur suivant : error: dereferencing pointer to incomplete type. A priori, on pourrait penser que cela est vient d'une erreur de programmation due aux pointeurs...
Le problème est un peu plus sournois et c'est ici que j'ai trouvé la réponse. Voici un petit exemple pour illustrer le souci !
Tout d'abord, la fonction suivante est définie dans un fichier MyFunction.h :
struct MyStruct* getStruct() { return NULL; }
Cette définition est tout à fait valide, même si aucune structure n'est définie dans le fichier en question. Par ailleurs, la fonction devrait également juste être déclarée et non implémentée...
Vient ensuite le fichier MyStruct.h qui définit réellement la structure :
struct MyStruct { int value; };
Puis enfin le fichier Main.c qui va utiliser tout ça :
#include <stdlib.h> #include "MyFunction.h" int main() { struct MyStruct* my_struct = getStruct(); my_struct->value = 0; //Segmentation fault return 0; }
Voici la commande de compilation GCC que j'utilise :
gcc -Wall -o Main Main.c
Ainsi que l'erreur du compilateur :
Main.c: In function ‘main’: Main.c:7: error: dereferencing pointer to incomplete type
Il est intéressant de noter que l'erreur est signalée sur la ligne 7 (my_struct->value) ! A la base, n'ayant pas bien compris le message d'erreur, je pensais m'être trompé d'opérateur (la flèche) de ciblage.
En fait, cela vient simplement du fait que la définition de la structure MyStruct n'a pas été trouvée ! La résolution du problème est simple : il suffit d'inclure le fichier MyStruct.h et GCC compile tout ça normalement.
#include <stdlib.h> #include "MyFunction.h" #include "MyStruct.h" int main() { struct MyStruct* my_struct = getStruct(); my_struct->value = 0; return 0; }
Comme je suis pas encore très expérimenté en C/C++, j'espère que ça pourra éviter à d'autres quelques recherches