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   -
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 :
-----------------------------

#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:

2 réponses

informatique_c Messages postés 30 Date d'inscription   Statut Membre Dernière intervention   1
 
dsl pr l'image
0
IntGrapher Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
Par curiosité, t sous quel OS ?
0
IntGrapher Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
Et dans la fonction remplir_je sais pas quoi, dans le premier for(), tu fais *i = 0;
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 ...
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Tu utilise un pointeur sur i alors que i est de ja un pointeur(sa fait un double par).
Je ne comprends pas ce que tu veux dire IntGrapher...
Il fait *i=0... C'est normal puisque i est un pointeur...
0
IntGrapher Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   > fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
C ce que je me disait quand j'ai commencé à utiliser les pointeur mais i est de type Int*, et un pointeur est une variable qui stocke une adresse mémoire donc quand il fait *i, il manipule l'adresse d'une adresse(adresse d'un pointeur ou double pointeur)
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Pas du tout !
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...
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
0
informatique_c
 
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 .
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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.
0
informatique_c Messages postés 30 Date d'inscription   Statut Membre Dernière intervention   1
 
ok Mercie beaucoup je te repend dé que je fais les corrections...
0
informatique_c Messages postés 30 Date d'inscription   Statut Membre Dernière intervention   1
 
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 ??
0