Bonjour,
Suite a mon apprentissage du C, j'essaie d'utiliser les structures.
Je vous met ici mon code de test.
Mon Main
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 /* LIBRAIRIE */ #include "stdlib.h" #include "stdio.h" #include "fonctions.h" int main(int argc, char *argv[]) { int i; struct sCoordonneePion { char cCharColonne; int dIntColonne; int dLigne; char tDamier[8][8]; }; //typedef struct sCoordonneePion sCoordonneePion; struct sCoordonneePion dFou, dTour; test(&dFou); printf("dLigne = %d", dFou.dLigne); }
Mon fichier fonctions.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part void test(struct sCoordonneePion *pdFou);
et mon fichier fonction.c
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 void test(struct sCoordonneePion *pdFou) { pdFou->dLigne = 12; }
Les erreurs que visual studio souligne en rouge dans le main :
il souligne le & et me dit
Code : Sélectionner tout - Visualiser dans une fenêtre à part test(&dFou);
"L'argument de type "sCoordoneePion *" est incompatible avec le paramètre de type "sCoordonneePion *"
Et l'erreur que j'ai dans le fichier "fonctions.cpp" :
Visual Studio souligne en rouge pdFou et me dit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part pdFou->dLigne = 12;
"Pointeur vers un type classe incomplète non autorisé"
On m'a indiquer que je devais déclarer la structure dans mon fichier fonctions.h
m’expliquant que je devais déclarer ma structure
Oui, tu doit mettre la déclaration du type struct sCoordonneePion dans le .h. Mais seulement la déclaration du type, pas la définition des variables dFou, dTour.
Je suppose que le cours que tu suis a mal présenté les notions de déclaration et définition. Elles sont simples, mais fondamentale. Une déclaration sert décrire un identificateur, ainsi le compilateur sait ce que représente cet identificateur (une fonction, un type, une variable, etc.). Mais une simple déclaration ne produit rien dans l'exécutable compilé. Ce qui produit qqch, c'est une définition.
Quelques exemples :et j'avoue ne pas comprendre la différence..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 // déclaration de type struct toto { int x; char y; }; // déclaration de variable extern int foo; // déclaration de fonction int bar(void); // définition de variable int foo; // définition de fonction int bar(void) { return 22; }
Est ce que qlq'un pourrait m'expliquer la différence svp??
Ou me diriger vers un lien pertinent??! pq je ne trouve rien qui soit "parlant"..
Merci d'avance a ceux qui prendront le temps de m’éclairer
Partager