Rechercher : dans
Par :

C++/ Undefined reference

Dernière réponse le 7 jun 2009 à 17:20:46 Wanted59, le 6 jun 2009 à 21:35:55 
 Signaler ce message aux modérateurs

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.

Configuration: Windows XP
Safari 525.19

Meilleures réponses pour « C++/ Undefined reference » dans :
Choisir sa carte graphique en fonction de sa référence VoirClassement des cartes graphiques par leur référence Les conseils pour le choix d'une carte graphique sont données dans l'astuce : Choisir une carte graphique pour son PC Ici, on va donner les clés de décodage pour comprendre comment les...
Les bases pour référencer votre site professionnel facilement VoirLes bases pour référencer son site professionnel facilement Avoir un site Internet c'est bien mais faire en sorte qu'il attire un grand nombre de visiteurs c'est indispensable ! En effet, le Web abrite une quantité colossale de contenus et sortir...
Les accesseurs et les mutateurs en langage C++ VoirLa protection des données membres L'un des aspects les plus essentiels du concept « orienté objet » est l'encapsulation, qui consiste à définir des étiquettes pour les données membres et les fonctions membres afin de préciser si celles-ci sont...
Les objets en langage C++ VoirLa création d'objets En C++, il existe deux façons de créer des objets, c'est-à-dire d'instancier une classe : de façon statique de façon dynamique La création statique La création statique d'objets consiste à créer un objet en lui affectant un...

1

mype, le 7 jun 2009 à 01:34:34

Poste nous ton code en entier ça sera plus simple pour voir le probleme

Répondre à mype

2

Wanted59, le 7 jun 2009 à 10:09:37

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

Répondre à Wanted59

3

gourou2k, le 7 jun 2009 à 10:15:14

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 ?

Répondre à gourou2k

4

Wanted59, le 7 jun 2009 à 10:35:23

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.

Répondre à Wanted59

5

Wanted59, le 7 jun 2009 à 11:38:08

ça ne marche toujours pô...

Répondre à Wanted59

6

easycomp, le 7 jun 2009 à 11:43:38

Salut,
Essaie de déclarer ton personnage avec un new pour voir ( Personnage Kurutchin = new Personnage(); )
On peut apprendre à un ordinateur à dire "Je t'aime", mais on ne peut pas lui apprendre à aimer.

Répondre à easycomp

7

easycomp, le 7 jun 2009 à 11:44:39

Ah et aussi,
Pense à déclarer ton destructeur étant donné que tu manipules des pointeurs... On peut apprendre à un ordinateur à dire "Je t'aime", mais on ne peut pas lui apprendre à aimer.

Répondre à easycomp

8

Wanted59, le 7 jun 2009 à 12:12:34

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.

Répondre à Wanted59

9

easycomp, le 7 jun 2009 à 12:15:20

Re,

Peux-tu copier le code de kuruFries.h ? On peut apprendre à un ordinateur à dire "Je t'aime", mais on ne peut pas lui apprendre à aimer.

Répondre à easycomp

10

Wanted59, le 7 jun 2009 à 12:29:51

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

Répondre à Wanted59

11

easycomp, le 7 jun 2009 à 12:39:13

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. On peut apprendre à un ordinateur à dire "Je t'aime", mais on ne peut pas lui apprendre à aimer.

Répondre à easycomp

12

Wanted59, le 7 jun 2009 à 12:53:10

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

Répondre à Wanted59

13

easycomp, le 7 jun 2009 à 12:56:05

Kuruchin est un pointeur d'objet. Pointeur = déréférencement.
Essaye avec Kuruchin->afficher(ecran);
On peut apprendre à un ordinateur à dire "Je t'aime", mais on ne peut pas lui apprendre à aimer.

Répondre à easycomp

14

Wanted59, le 7 jun 2009 à 13:08:37

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.

Répondre à Wanted59

15

easycomp, le 7 jun 2009 à 13:14:37

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? On peut apprendre à un ordinateur à dire "Je t'aime", mais on ne peut pas lui apprendre à aimer.

Répondre à easycomp

16

Wanted59, le 7 jun 2009 à 13:17:54

J'utilise Code:block et mes option de compilation sont par defaut.

Répondre à Wanted59

17

easycomp, le 7 jun 2009 à 13:20:14

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" On peut apprendre à un ordinateur à dire "Je t'aime", mais on ne peut pas lui apprendre à aimer.

Répondre à easycomp

18

Wanted59, le 7 jun 2009 à 13:22:39

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.

Répondre à Wanted59

19

easycomp, le 7 jun 2009 à 13:24:00

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.
On peut apprendre à un ordinateur à dire "Je t'aime", mais on ne peut pas lui apprendre à aimer.

Répondre à easycomp
Collection CommentÇaMarche.net