Le fameux erreur "undefined reference to 'fonction' . "
Résolu
informatique_c
Messages postés
30
Date d'inscription
Statut
Membre
Dernière intervention
-
informatique_c Messages postés 30 Date d'inscription Statut Membre Dernière intervention -
informatique_c Messages postés 30 Date d'inscription Statut Membre Dernière intervention -
salut !
voila mon problème , j'ai eu l'erreur ' undefined reference to ' malgré que j'ait cernais tout les probs , dans mon projet j'ai deux fichiers source (main.c et exo_joueurs.c ) et j'ai aussi le fichier header (exo_joueurs.h),bref mon code lis les informations des joueurs c tt
donc voila le code :
dans le fichier main.c il y'a :
-----------------------------
----------------------------------
dans le fichier exo_joueurs.c il y'a :
------------------------------------
------------------------------------
dans le fichier header exo_joueurs.h y'a :
------------------------------------
----------------------------------
voila une photo :
voila mon problème , j'ai eu l'erreur ' undefined reference to ' malgré que j'ait cernais tout les probs , dans mon projet j'ai deux fichiers source (main.c et exo_joueurs.c ) et j'ai aussi le fichier header (exo_joueurs.h),bref mon code lis les informations des joueurs c tt
donc voila le code :
dans le fichier main.c il y'a :
-----------------------------
#include <stdlib.h> #include <stdio.h> #include <string.h> #include "exo_joueurs.h" typedef struct joueur joueur; struct joueur{ char nom[50]; char prenom[50]; int age; int sexe; }; main(){ char S[20]; joueur J[20] = {"","",0,0}; int i; puts("Bien venu a notre programme qui colécte les informations des joueurs"); rempl_de_tab(&J); puts(""); puts(""); }
----------------------------------
dans le fichier exo_joueurs.c il y'a :
------------------------------------
#include<stdio.h> #include<stdlib.h> #include<string.h> #include "exo_joueurs.h" void rempl_de_tab(int *i,joueur *J){ for(*i=0;*i<=19;*i++){ printf("joueur %d faitez entrez vautre : \n nom \n prenom \n age \n sexe : 1-si homme 2- si famme \n",i); scanf("%s%s%d%d",J[*i].nom,J[*i].prenom,J[*i].age,J[*i].sexe); } }
------------------------------------
dans le fichier header exo_joueurs.h y'a :
------------------------------------
#ifndef DEF_EXO_JOUEURS // Si la constante n'a pas été définie le fichier n'a jamais été inclus #define DEF_EXO_JOUEURS // On définit la constante pour que la prochaine fois le fichier ne soit plus inclus /* Contenu de votre fichier .h (autres include, prototypes, define...) */ void rempl_de_tab(); void affich_de_tab(); #endif
----------------------------------
voila une photo :

A voir également:
- Undefined reference to printf in c
- Qwerty to azerty - Guide
- Navigation in private - Guide
- Reference pto - Accueil - Box & Connexion Internet
- Deco in paris avis ✓ - Forum Consommation & Internet
- Déco in paris site fiable ???? - Forum Consommation & Internet
2 réponses
Bonjour,
Pourquoi passer par un pointeur sur i dans ta fonction rempl_de_tab() ?
Pas besoin. Un simple passage par copie fera l'affaire.
Dans ton .h, le prototype est faux.
Il faut mettre : void rempl_de_tab(int*, joueur*);
D'ailleurs quand tu appelles ta fonction, tu ne passes qu'un paramètre au lieu des 2 attendus. Il faut faire attention à tout bien mettre en conformité.
Dans ta fonction rempl_de_tab(), tu fais printf("%d"...",i); au lieu de *i (vu que c'est un pointeur...).
Et enfin, le prototype de main() est : int main(void). et il ne faut pas oublier le return 0; final. Tu peux aussi enlever le i du main, tu ne t'en sers pas. Je te conseille de simplement l'utiliser dans rempl_de_tab(). Donc tu fais int i; dans rempl_de_tab(). Du coup le prototype devient : void rempl_de_tab(joueur*). Ca sera plus simple et plus propre.
L'erreur peut aussi venir de la compilation. L'édition des liens est-elle correcte ? Comment compiles-tu ?
Google is your friend
Pourquoi passer par un pointeur sur i dans ta fonction rempl_de_tab() ?
Pas besoin. Un simple passage par copie fera l'affaire.
Dans ton .h, le prototype est faux.
Il faut mettre : void rempl_de_tab(int*, joueur*);
D'ailleurs quand tu appelles ta fonction, tu ne passes qu'un paramètre au lieu des 2 attendus. Il faut faire attention à tout bien mettre en conformité.
Dans ta fonction rempl_de_tab(), tu fais printf("%d"...",i); au lieu de *i (vu que c'est un pointeur...).
Et enfin, le prototype de main() est : int main(void). et il ne faut pas oublier le return 0; final. Tu peux aussi enlever le i du main, tu ne t'en sers pas. Je te conseille de simplement l'utiliser dans rempl_de_tab(). Donc tu fais int i; dans rempl_de_tab(). Du coup le prototype devient : void rempl_de_tab(joueur*). Ca sera plus simple et plus propre.
L'erreur peut aussi venir de la compilation. L'édition des liens est-elle correcte ? Comment compiles-tu ?
Google is your friend
salut
merci tout le monde
bon fiddy j'ai bien été aider par ta repense , bon pour t questions (L'édition des liens est-elle correcte ? Comment compiles-tu ? ) je veux bien savoir de quoi tu parle !? si tu parle du compilateur je travaille avec mingw et mon IDE c code;;blocs si non reformule moi ta question pour que j puisse comprendre s.v.p ... , et aussi pourquoi tu veux que je transforme ma procédure void main en fonction int main quelle est le but de ça ?? par-se-que y'a rien a retourner .
merci tout le monde
bon fiddy j'ai bien été aider par ta repense , bon pour t questions (L'édition des liens est-elle correcte ? Comment compiles-tu ? ) je veux bien savoir de quoi tu parle !? si tu parle du compilateur je travaille avec mingw et mon IDE c code;;blocs si non reformule moi ta question pour que j puisse comprendre s.v.p ... , et aussi pourquoi tu veux que je transforme ma procédure void main en fonction int main quelle est le but de ça ?? par-se-que y'a rien a retourner .
Sans trop rentrer dans les détails, l'édition des liens (ou linking) est l'étape de la compilation où le compilateur fait le lien avec toutes les fonctions, bibliothèques, etc. Si, la compilation est mal faite, (par exemple : oublie d'inclure les bibliothèques lors de l'édition), tu obtiendras un message d'erreur similaire. Pour l'instant, mettons ça de côté. Je ne pense pas que le problème vient de là dans ton cas.
Pour le main(), il n'y a pas de "pourquoi" à se poser. C'est la norme qui dit que cette fonction renvoie un int. La valeur est renvoyée à l'appelant (par exemple l'OS). Il faut renvoyer 0 pour dire que tout s'est bien passer et EXIT_FAILURE en cas d'erreur. D'ailleurs pour être plus précis, le bon prototype du main() sans argument est : int main(void)
N'hésite pas à reposter ton code, si les erreurs persistent après les diverses corrections apportées.
Pour le main(), il n'y a pas de "pourquoi" à se poser. C'est la norme qui dit que cette fonction renvoie un int. La valeur est renvoyée à l'appelant (par exemple l'OS). Il faut renvoyer 0 pour dire que tout s'est bien passer et EXIT_FAILURE en cas d'erreur. D'ailleurs pour être plus précis, le bon prototype du main() sans argument est : int main(void)
N'hésite pas à reposter ton code, si les erreurs persistent après les diverses corrections apportées.
salut fiddy j'ais tous fais comme ta dit mais le truc ne marche pas , méme erreur , j'ai vu sur net que les tableau font directement le passage pare adresse c'est a dire la fonction ne fait pas de copie sauf qu'elle accède directement aux tableau..............donc s que je veux savoire c que esque je peux me débarrasser du pointeur si non comment faire ??
Tu utilise un pointeur sur i alors que i est de ja un pointeur(sa fait un double par).
Sinon essayer de recréer ton projet ...
Je ne comprends pas ce que tu veux dire IntGrapher...
Il fait *i=0... C'est normal puisque i est un pointeur...
i est de type int*. Donc i (et non *i) représente une adresse dans la pile qu'on accède via *i.
Dis autrement *i est de type int (ce n'est clairement pas un double pointeur). Donc il est normal qu'il fasse *i=0...