Différence entre une définition et declaration (variable et structure)
Bonjour,
Suite a mon apprentissage du C, j'essaie d'utiliser les structures.
Je vous met ici mon code de test.
Mon Main
Code:
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:
void test(struct sCoordonneePion *pdFou);
et mon fichier fonction.c
Code:
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
"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" :
Code:
pdFou->dLigne = 12;
Visual Studio souligne en rouge pdFou et me dit :
"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
Citation:
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 :
Code:
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;
} |
et j'avoue ne pas comprendre la différence..
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 :)