C / Undefined reference .......
Résolu
Wanted59
Messages postés
44
Date d'inscription
Statut
Membre
Dernière intervention
-
hapaahamza -
hapaahamza -
Bonjour, Les "Undefinded reference" me hantent c'est horrible, ce coup si je ne pige encore une fois de plus pas du tout pourquoi ça bug : Message du debuggueur : main.cpp 84 Undefined reference to 'jouer(SDL_Surface *ecran)' main.cpp : #include <stdlib.h> #include <stdio.h> #include <SDL.h> #include <SDL_image.h> #include "Constante.h" #include "Jeu.h" int main(int argc, char *argv[]) { SDL_Surface *ecran = NULL, *menu1 = NULL, *menu2 = NULL; SDL_Rect positionMenu; SDL_Event event; int continuer = 1, afficherMenu2 = 0; SDL_Init(SDL_INIT_VIDEO); //SDL_WM_SetIcon(IMG_Load("caisse.jpg"), NULL); ecran = SDL_SetVideoMode(1280, 1024, 32, SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_FULLSCREEN); SDL_WM_SetCaption("Kuru's fries", NULL); menu1 = SDL_LoadBMP("Data/Menu/menu1.bmp"); menu2 = SDL_LoadBMP("Data/Menu/menu2.bmp"); positionMenu.x = 0; positionMenu.y = 0; while (continuer) { SDL_WaitEvent(&event); switch(event.type) { case SDL_QUIT: continuer = 0; break; case SDL_KEYDOWN: switch(event.key.keysym.sym) { case SDLK_ESCAPE: continuer = 0; break; } afficherMenu2 = 1; break; } if(afficherMenu2 == 1); { switch(event.type) { case SDL_KEYDOWN: switch(event.key.keysym.sym) { case SDLK_KP1: // jouer(ecran); break; } break; } } jouer(ecran); SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0)); if(afficherMenu2 == 0) SDL_BlitSurface(menu1, NULL, ecran, &positionMenu); if(afficherMenu2 == 1) SDL_BlitSurface(menu2, NULL, ecran, &positionMenu); SDL_Flip(ecran); } SDL_FreeSurface(menu1); SDL_FreeSurface(menu2); SDL_Quit(); return EXIT_SUCCESS; } jeu.c : void jouer(SDL_Surface *ecran) { SDL_Surface *kurutchin[100] = {NULL}, *frite[10] = {NULL}; SDL_Surface *kurutchinActuel = NULL, *fond = NULL; SDL_Rect positionKurutchin, positionFond; SDL_Event event; int continuer = 1; /* ... du code (juste des initialisations) ... */ while (continuer) { SDL_WaitEvent(&event); switch(event.type) { case SDL_QUIT: continuer = 0; break; case SDL_KEYDOWN: switch(event.key.keysym.sym) { case SDLK_ESCAPE: continuer = 0; break; } break; } SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255)); SDL_BlitSurface(fond, NULL, ecran, &positionFond); } } jeu.h : #ifndef JEU_H_INCLUDED #define JEU_H_INCLUDED void jouer(SDL_Surface *ecran); #endif // JEU_H_INCLUDED J'ai coché Debug et release sur tout mes fichiers, et le débuggueur ne voit pas d'erreur mise a part ce fichu "undefined reference" Vous êtes mes seuls espoirs svp ^^ Merci d'avance
A voir également:
- Le compte reference est actuellement verrouillé
- Compte instagram verrouillé - Guide
- Telephone verrouillé - Guide
- Créer un compte google - Guide
- Installer windows 10 sans compte microsoft - Guide
- Créer un compte gmail - Guide
12 réponses
Salut,
En fait loupius, a raison, mais il le dit mal. Tu doit linker le fichier libSDL.a(ou quelque chose de semblable) à ton projet, afin que le compilo prenne des informations sur les fonction que tu veut utiliser,si tu utilse CodeBlocks, va dans Projects/Build Target/Linker Settings/Add/.../"Chemin de ton fichier.a(ou '.lib')".
Mais je ne pense pas que ton problème soit dû à cela, c'est juste que ton fichier 'main.c' ne connaisse pas l'implémentation de la fonction jouer(d'ou l'erreur"Undefined reference to 'jouer(SDL_Surface *ecran)'
"). Tu rajoute donc à ton main.cpp
#include "jouer.h"
#include "jouer.c"
Et comme par ... le tout fonctionne(j'espère quand même ne pas avoir dit trop de bêtises).
@+
En fait loupius, a raison, mais il le dit mal. Tu doit linker le fichier libSDL.a(ou quelque chose de semblable) à ton projet, afin que le compilo prenne des informations sur les fonction que tu veut utiliser,si tu utilse CodeBlocks, va dans Projects/Build Target/Linker Settings/Add/.../"Chemin de ton fichier.a(ou '.lib')".
Mais je ne pense pas que ton problème soit dû à cela, c'est juste que ton fichier 'main.c' ne connaisse pas l'implémentation de la fonction jouer(d'ou l'erreur"Undefined reference to 'jouer(SDL_Surface *ecran)'
"). Tu rajoute donc à ton main.cpp
#include "jouer.h"
#include "jouer.c"
Et comme par ... le tout fonctionne(j'espère quand même ne pas avoir dit trop de bêtises).
@+
C'est bien ce qui me semblait, ça a rien à voir avec le débogueur; c'est simplement une erreur de déclaration. En effet, la compilation réclame des informations nécessaires à la construction de l'exécutable, notamment les bibliothèques utilisées. Donc tu dois déclarer l'utilisation de 'SDL'.
Bonne continuation.
Bonne continuation.
Et bien tu dois dire que l'édition des liens doit se faire avec la bibliothèque 'SDL'.
Pour cela, avec QtCreator, édite le fichier ???.pro et ajoute une ligne du style:
Bonne continuation.
Pour cela, avec QtCreator, édite le fichier ???.pro et ajoute une ligne du style:
LIBS += -lSDLEnsuite tu reconstruis le tout avec la commande Build/Rebuild All. Je pense que ça devrait aller.
Bonne continuation.
Il y a quelque chose qui me gêne; pour moi ce n'est pas le débogueur qui donne ce message; il est généré lors de la compilation.
Peut-on avoir tous les messages de la compilation (à moins qu'il y ait plus de 20 lignes) et quelle est exactement la ligne 84 de main.cpp ?
Peut-on avoir tous les messages de la compilation (à moins qu'il y ait plus de 20 lignes) et quelle est exactement la ligne 84 de main.cpp ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionSalut, merci de me préter interet :) Alors à la ligne 84 du main .cpp il y a : jouer(ecran); Message entier du débuggueur : ||=== Kuru's fries, Debug ===| obj\Debug\main.o||In function `SDL_main':| Kuru's fries\main.cpp|84|undefined reference to `jouer(SDL_Surface*)'| ||=== Build finished: 1 errors, 0 warnings ===| Voilà voilà.
Je comprend pas trop enfaite, car j'ai jamais utilisé qt creator.
Il faut que je créé un fichier du genre editSDL.pro et que j'ajoute une ligne
LIBS += -1SDL mais je l'ajoute où cette ligne?
Pi ensuite je reconstruit quoi? car je comprends pas comment faire du tout là.
Merci de m'expliquer stp pi encore merci de m'avoir répondu :).
Il faut que je créé un fichier du genre editSDL.pro et que j'ajoute une ligne
LIBS += -1SDL mais je l'ajoute où cette ligne?
Pi ensuite je reconstruit quoi? car je comprends pas comment faire du tout là.
Merci de m'expliquer stp pi encore merci de m'avoir répondu :).
Oh, je te prie de m'excuser, j'ai fait une erreur entre deux posts et je croyais que tu utilisais QtCreator.
Donc je suppose que tu utilises la ligne de commande, quelque chose du genre:
gcc -Wall -c main.cpp jeu.c -o jeu
alors modifie ta ligne ainsi:
gcc -Wall -c main.cpp jeu.c -lSDL -o jeu
D'ailleurs, comment se fait-il qu'il y ait un fichier 'c' et un fichier 'cpp' ? Ce n'est pas très cohérent !
Mille excuses pour cette perte de temps.
Donc je suppose que tu utilises la ligne de commande, quelque chose du genre:
gcc -Wall -c main.cpp jeu.c -o jeu
alors modifie ta ligne ainsi:
gcc -Wall -c main.cpp jeu.c -lSDL -o jeu
D'ailleurs, comment se fait-il qu'il y ait un fichier 'c' et un fichier 'cpp' ? Ce n'est pas très cohérent !
Mille excuses pour cette perte de temps.
J'ai exactement le meme probleme ( je suis le tuto C sur le site du zero)
Je ne trouve aucune solution j'ai bien mit les #include "jeu.h" et editeur.h mais sa ne marche pas.
J'ai bien mit tout mes fichier dans le projet etc etc
aidez moi
Drave
Je ne trouve aucune solution j'ai bien mit les #include "jeu.h" et editeur.h mais sa ne marche pas.
J'ai bien mit tout mes fichier dans le projet etc etc
aidez moi
Drave
Salut,
tout ce que vous avez dit ne m'a pas été utile, et je pense c'est ce que ça va être pour quelqun, alors ce que m'a aidé est la suite
vous devez aller au dossier de votre projet et supprimer tout fichier nouveau, ça veut que vous n'avez pas crée, et je précise les dossiers bin et obj, et un fichier que son nom contient depend ou qqch comme ca
j'espere que ca va aider
tout ce que vous avez dit ne m'a pas été utile, et je pense c'est ce que ça va être pour quelqun, alors ce que m'a aidé est la suite
vous devez aller au dossier de votre projet et supprimer tout fichier nouveau, ça veut que vous n'avez pas crée, et je précise les dossiers bin et obj, et un fichier que son nom contient depend ou qqch comme ca
j'espere que ca va aider
j'avais inclus le .h mais pas le .c