C++/ Undefined reference
Résolu
Wanted59
Messages postés
44
Statut
Membre
-
INDUSTRINFO -
INDUSTRINFO -
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.
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.
A voir également:
- C++/ Undefined reference
- Reference pto - Accueil - Box & Connexion Internet
- Indice de référence des loyers - Guide
- Impossible d'accéder à l'élément référencé par ce raccourci ✓ - Forum Windows
- Dans le document à télécharger, les références des pièces détachées sont affichées par pays, puis par type de pièces. réorganisez le document pour avoir : les pays dans l'ordre alphabétique : allemagne, espagne, france et italie ; et pour chaque pays, les pièces d'auto, de bateau et de moto dans cet ordre. quelle est la référence de la pièce en ligne 500 ? ✓ - Forum Windows
- Undefined traduction - Forum Javascript
23 réponses
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 ?
} ;
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 ?
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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"
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 ===|
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 ===|
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.
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.
Salut,
Essaie de déclarer ton personnage avec un new pour voir ( Personnage Kurutchin = new Personnage(); )
Essaie de déclarer ton personnage avec un new pour voir ( Personnage Kurutchin = new Personnage(); )
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
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
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.
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.
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 :)
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 :)
Kuruchin est un pointeur d'objet. Pointeur = déréférencement.
Essaye avec Kuruchin->afficher(ecran);
Essaye avec Kuruchin->afficher(ecran);
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.
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.
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?
Quel IDE utilises-tu?
Si tu compiles a la main, tes options de compilation?
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.