C++/ Undefined reference

Résolu/Fermé
Wanted59 Messages postés 44 Date d'inscription vendredi 6 mars 2009 Statut Membre Dernière intervention 15 octobre 2009 - 6 juin 2009 à 21:35
 INDUSTRINFO - 7 juin 2009 à 17:20
Bonjour à tous,
j'ai un problème pendant la compilation de mon code, le voilà :
undefined reference to `Personnage::Personnage()'
J'ai cherché pendant des heures et j'exagère pas, j'ai du tourner en rond tous ce temps en tout cas c'était totalement vain... Je ne comprend pas du tout le problème et je ne trouve pas de solution sur le net, merci de bien vouloir m'éclairer sur ce sujet.

23 réponses

easycomp Messages postés 86 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 4 juillet 2009 30
7 juin 2009 à 11:44
Ah et aussi,
Pense à déclarer ton destructeur étant donné que tu manipules des pointeurs...
3
class personnage {


} ;
As-tu bien mis el point virgule apres l'accolade fermante de ta classe ?

Le fichier CPP existe-t-il avec toutes les méthodes déclarés dans ton .h ?

Fait tu un appel ou une déclaration dans ton code source de cette classe ?
As tu pensé à l'include personnage.h , là où tu instancies ta classe ?
1
Wanted59 Messages postés 44 Date d'inscription vendredi 6 mars 2009 Statut Membre Dernière intervention 15 octobre 2009 7
7 juin 2009 à 12:12
Merci du conseil,
J'ai essayé et maintenant j'ai une autre erreur :

kuruFries.h|12|error: conversion from `Personnage*' to non-scalar type `Personnage' requested|

Celle là je ne l'avais jamais vu avant.
1
easycomp Messages postés 86 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 4 juillet 2009 30
7 juin 2009 à 12:15
Re,

Peux-tu copier le code de kuruFries.h ?
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
easycomp Messages postés 86 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 4 juillet 2009 30
7 juin 2009 à 13:20
OK dans ce cas vérifie dans "Project -> Properties -> Build Target" que tous tes fichiers sources soient cochés en Debug et en Release dans le textbox "Build Target File"
1
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
7 juin 2009 à 01:34
poste nous ton code en entier ça sera plus simple pour voir le probleme
0
Wanted59 Messages postés 44 Date d'inscription vendredi 6 mars 2009 Statut Membre Dernière intervention 15 octobre 2009 7
7 juin 2009 à 10:09
Alors voilà un partie du code :

Dans Personnage.h :

#ifndef PERSONNAGE_H_INCLUDED
#define PERSONNAGE_H_INCLUDED

class Personnage
{
public :
Personnage();
Personnage(SDL_Surface *personnage, SDL_Rect positionPersonnage);
void afficher(SDL_Surface *surface);
void lancer();

private :

SDL_Surface *m_personnage;
SDL_Rect m_positionPersonnage;



};

#endif // PERSONNAGE_H_INCLUDED

Dans Personnage.cpp :

#include<iostream>
#include<SDL/SDL.h>
#include<SDL_image.h>
#include<Personnage.h>

Personnage::Personnage()
{
*m_personnage = NULL;
m_positionPersonnage.x = 0;
m_positionPersonnage.y = 0;
}

Personnage::Personnage(SDL_Surface *personnage, SDL_Rect positionPersonnage)
{
*m_personnage = *personnage;
m_positionPersonnage.x = positionPersonnage.x;
m_positionPersonnage.y = positionPersonnage.y;
}

Personnage::afficher(SDL_Surface surface)
{
SDL_BlitSurface(m_personnage, NULL, surface, &m_positionPersonnage);
}

Et l'endroit où je déclare ma déclaration de class :

while(menu_extra_kuruFries)
{
SDL_WaitEvent(&event);

if(kuruFries_declarationVariables)
{
SDL_Surface *kuruFries_kurutchin = SDL_LoadBMP("Data\\Images\\KuruFries\\image_kurutchin.bmp");
SDL_Rect positionKuruFries_kurutchin;
kuruFries_imageDeDebut = SDL_LoadBMP("Data\\Images\\KuruFries\\image_debut.bmp");
Personnage Kurutchin; // ça bug ici
kuruFries_declarationVariables = false;
}

Et ça m'affiche :

||=== Projet 1, Debug ===|
main.cpp|411|undefined reference to `Personnage::Personnage()'|
main.cpp|442|undefined reference to `Personnage::Personnage()'|
main.cpp|443|undefined reference to `Personnage::afficher(SDL_Surface*)'|
||=== Build finished: 3 errors, 0 warnings ===|
0
Wanted59 Messages postés 44 Date d'inscription vendredi 6 mars 2009 Statut Membre Dernière intervention 15 octobre 2009 7
7 juin 2009 à 10:35
Lu et merci de bien vouloir m'aider,
J'ai bien mis le ";" après l'accolade fermante de ma class par contre j'ai pas mis toutes les méthodes de mon .h dans le .cpp car je voulais juste tester si j'arrivé au moins a déclarer ma class Kurutchin et de l'afficher. Je vais essayer de tout mettre dans le .cpp. Et au niveau et l'inclusion de Personnage.h c'est ok pi de toute manière je croi que le débuggeur m'aurai dit qu'il n'existe pas de Class Personnage. 'Fin bref j'essai et je repost pour dire quoi.
0
Wanted59 Messages postés 44 Date d'inscription vendredi 6 mars 2009 Statut Membre Dernière intervention 15 octobre 2009 7
7 juin 2009 à 11:38
ça ne marche toujours pô...
0
easycomp Messages postés 86 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 4 juillet 2009 30
7 juin 2009 à 11:43
Salut,
Essaie de déclarer ton personnage avec un new pour voir ( Personnage Kurutchin = new Personnage(); )
0
Wanted59 Messages postés 44 Date d'inscription vendredi 6 mars 2009 Statut Membre Dernière intervention 15 octobre 2009 7
7 juin 2009 à 12:29
Voilà :

kuruFries.h :

#ifndef KURUFRIES_H_INCLUDED
#define KURUFRIES_H_INCLUDED
#include "Personnage.h"

SDL_Surface *kuruFries_imageDeDebut = NULL;

SDL_Rect positionKuruFries_imageDeDebut;

bool kuruFries_declarationVariables = true;
bool kuruFries_afficher_imageDeDebut = true;

Personnage Kurutchin = new Personnage();

#endif

Personnage.h:

#ifndef PERSONNAGE_H_INCLUDED
#define PERSONNAGE_H_INCLUDED

class Personnage
{
public :
Personnage();
Personnage(SDL_Surface *personnage, SDL_Rect positionPersonnage);
~Personnage();
void afficher(SDL_Surface *surface);
void lancer();

private :

SDL_Surface *m_personnage;
SDL_Rect m_positionPersonnage;



};

#endif // PERSONNAGE_H_INCLUDED
0
easycomp Messages postés 86 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 4 juillet 2009 30
7 juin 2009 à 12:39
Ok, essaye comme ça:

Personnage *Kurutchin;
dans ton .h et
Kurutchin = new Personnage(); quand tu veux initialiser ton personnage

logiquement tu n'initialises pas de variable ou objet dans le .h mais bon.

Dis moi si c'est bon.
0
Wanted59 Messages postés 44 Date d'inscription vendredi 6 mars 2009 Statut Membre Dernière intervention 15 octobre 2009 7
7 juin 2009 à 12:53
Alors maintenant j'arrive a initialiser Kurutchin mais quand j'utilise une fonction de la class ça me met :

main.cpp|442|error: request for member `afficher' in `Kurutchin', which is of non-class type `Personnage*'|

main.cpp :

ligne 442 : Kurutchin.afficher(ecran);

Merci beaucoup de te soucier de mon problème en tout cas :)
0
easycomp Messages postés 86 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 4 juillet 2009 30
7 juin 2009 à 12:56
Kuruchin est un pointeur d'objet. Pointeur = déréférencement.
Essaye avec Kuruchin->afficher(ecran);
0
Wanted59 Messages postés 44 Date d'inscription vendredi 6 mars 2009 Statut Membre Dernière intervention 15 octobre 2009 7
7 juin 2009 à 13:08
snif j'en ai marre...
Maintenant les undefined reference reviennent, je galère vraiment en C++...
J'ai tout déclaré comme tu m'a dit

Personnage *Kurutchin;
ligne 412 : Kurutchin = new Personnage();

et quand j'utilise :

ligne 442 : Kurutchin->afficher(ecran);

ça me met :

main.cpp|412|undefined reference to `Personnage::Personnage()'|
main.cpp|442|undefined reference to `Personnage::afficher(SDL_Surface*)'|
||=== Build finished: 2 errors, 2 warnings ===|

'fin bref là franchement je rame.
0
easycomp Messages postés 86 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 4 juillet 2009 30
7 juin 2009 à 13:14
Heu petite question un peu bête mais j'aurais dû y penser au départ:
Quel IDE utilises-tu?
Si tu compiles a la main, tes options de compilation?
0
Wanted59 Messages postés 44 Date d'inscription vendredi 6 mars 2009 Statut Membre Dernière intervention 15 octobre 2009 7
7 juin 2009 à 13:17
J'utilise Code:block et mes option de compilation sont par defaut.
0
Wanted59 Messages postés 44 Date d'inscription vendredi 6 mars 2009 Statut Membre Dernière intervention 15 octobre 2009 7
7 juin 2009 à 13:22
A oui ben vu maintenant le débbugeur m'indique plein de nouvelle erreurs que je vais essayer de résoudre une par une et si je bloque je reposterai, merci beaucoup.
0
easycomp Messages postés 86 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 4 juillet 2009 30
7 juin 2009 à 13:24
Voila :)
Maintenant tu sais que ces erreurs ne viennent plus de là ^^
J'ai eu un flash dans ma tête et je me suis dit "lui il coche pas les cases quand on lui demande" et j'ai eu raison :p
Si tu as encore des soucis, n'hésite pas.
0
easycomp Messages postés 86 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 4 juillet 2009 30
7 juin 2009 à 13:26
(Penses à passer en status "résolu")
0