begin process at 2012 02 10 01:37:23
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

Constructeur et polymorphisme


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Constructeur et polymorphisme

jeudi 28 mai 2009 à 16:43:53 | Constructeur et polymorphisme

Guiiil

Bonjour à tous,

Je suis en train de réaliser un p'tit jeu de rôle pour me faire la main (et une PTI au passage, les BTS IG comprendront), et je bloque sur un point :
 voici le code :

Guerrier.h
#ifndef GUERRIER_H_INCLUDED
#define GUERRIER_H_INCLUDED

#include <iostream>
#include <string>
#include "Personnage.h"

classGuerrier:publicPersonnage
{
private:
public:
Guerrier(std::stringHerosnom);
virtual~Guerrier();
virtualvoidFaitplusmal(Personnage&cible);
};

#endif // GUERRIER_H_INCLUDED


Magicien.h

#ifndef MAGICIEN_H_INCLUDED
#define MAGICIEN_H_INCLUDED

#include <iostream>
#include <string>
#include "Personnage.h"

classMagicien:publicPersonnage
{
public:
Magicien(std::stringHerosnom);
~Magicien();
voidbouleDeFeu(Personnage&cible);
voidbouleDeGlace(Personnage&cible);
voidsortdeSoin();

protected:
intmana;
};

#endif // MAGICIEN_H_INCLUDED

Personnage.h

#ifndef PERSONNAGE_H_INCLUDED
#define PERSONNAGE_H_INCLUDED

#include <iostream>
#include "Arme.h"

classPersonnage
{
protected:
std::stringm_nom;
intm_vie;
intm_mana;
std::stringm_nomarme;
intm_degatsarme;
std::stringm_metier;

public:
Personnage();
Personnage(std::stringHerosnom);
Personnage(std::stringnomArme,intdegatsArme);
Personnage(constPersonnage&personnageACopier);// Le prototype du constructeur de copie
virtual~Personnage(void);
virtualvoidrecevoirDegats(intnbDegats);
virtualvoidattaquer(Personnage&cible);
virtualvoidboirePotionDeVie(intquantitePotion);
virtualvoidchangerArme(std::stringnomNouvelleArme,intdegatsNouvelleArme);
virtualvoidafficherPV();
virtualboolestVivant();
virtualintretounerPV();
virtualintretourneDegatsArme();
virtualstd::stringRetournerMetier();
virtualvoidFaitplusmal(Personnage&cible);
virtualvoidbouleDeFeu(Personnage&cible);
virtualvoidbouleDeGlace(Personnage&cible);
virtualvoidsortdeSoin();
};


#endif // PERSONNAGE_H_INCLUDED

Selon le déboggeur, ça coince dans Magicien.cpp :

#include <string>
#include "Magicien.h"

usingnamespacestd;


Magicien::Magicien(stringHerosnom)
{
m_nom=Herosnom;
m_vie=100;
m_mana=100;
m_nomarme="Baton";
m_degatsarme=5;
m_metier="Magicien";
}

Magicien::~Magicien()
{
}

voidMagicien::bouleDeFeu(Personnage&cible)
{
if(m_mana==0)
{
cout<<"Vous n'avez plus de Mana"<<endl;
}
else
{
cible.recevoirDegats(10);
m_mana-=5;
}

}

voidMagicien::bouleDeGlace(Personnage&cible)
{
if(m_mana==0)
{
cout<<"Vous n'avez plus de Mana"<<endl;
}
else
{
cible.recevoirDegats(10);
m_mana-=5;
}
}

voidMagicien::sortdeSoin()
{
cout<<"Vous regagnez vingt points de vie"<<endl;
m_vie+=20;
m_mana-=10;
}




Mon problème ? Le code ne se compile pas correctement, la même erreur apparait à des dizaines de reprises : undefined
reference to 'Personnage::~Personnage()', qui a très probablement un
rapport avec les virtuals... Y a t-il un moyen de contourner cela ?

En vous remerciant !
jeudi 28 mai 2009 à 17:00:11 | Re : Constructeur et polymorphisme

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
Je n'ai pas testé, mais il est d'usage, dès que tu as un héritage, de créer un destructeur dans toutes les classes et de le mettre en "virtual".
Peux-tu le faire et me dire si cela résoud ton problème ?
jeudi 28 mai 2009 à 17:09:23 | Re : Constructeur et polymorphisme

Guiiil

Oui, je l'avais fait par la suite, et je viens de le retenter, mais ceci ne change rien au problème...
jeudi 28 mai 2009 à 17:12:03 | Re : Constructeur et polymorphisme

CptPingu

Administrateur CodeS-SourceS
Peux-tu, dans ce cas, essayer de poster un morceau indépendant de ton code, qui ne fonctionne pas, en essayant de simplifier au maximum le code qui pose problème ? En précisant bien entendu les erreurs que tu obtiens.
jeudi 28 mai 2009 à 17:18:51 | Re : Constructeur et polymorphisme

Guiiil

Le problème, c'est que je ne sais pas du tout ce qui ne fonctionne pas... Que ce soit Visual Studio, ou bien Code::Blocks, tous deux m'annoncent le même problème :
undefined reference to 'Personnage::~Personnage()'

à plusieurs reprise sans savoir précisément d'où vient le problème (sauf en ce qui
concerne Code::Blocks, qui précise que le problème vient du constructeur de magicien...).

jeudi 28 mai 2009 à 17:27:30 | Re : Constructeur et polymorphisme

CptPingu

Administrateur CodeS-SourceS
Sans code, je vais avoir du mal à t'aider...
Quelques pistes:
- Créer des destructeurs dans chaques classes, en "virtual"
- Vérifier qu'un destructeur indiqué dans un header (.h ou .hh), soit bien implémenté dans le fichier de code associé (.cpp ou .cc).
- Vérifier que les inclusions soient correctes.
jeudi 28 mai 2009 à 17:42:11 | Re : Constructeur et polymorphisme

Guiiil

J'ai trouvé le problème ^^. Merci pour m'avoir indiqué la voie à suivre !  En fait, j'avais mis par mégarde le destructeur de personnage en commentaire.

C'est vraiment triste de perdre presque une journée pour une erreur aussi bête... Merci encore !


Cette discussion est classée dans : include, cible, personnage, magicien, mana


Répondre à ce message

Sujets en rapport avec ce message

Petit probleme de trigo :-( [ par fryser_d ] Bon voila, je fais un petit jeu a la diablo, mais voila, petit probleme, quand je clique dans la fenetre le personnage se deplace vers la cible en uti Templates persos [ par nicolas66 ] Bonjour tlm,j'ai écrit une classe Matrix en template permettant de manipuler aussi bien des int, des double, ou autre ... Mais en maths, il existe aus Avt l'ouverture de session [ par yserver ] Boujours a tous.J'ai besoin de vos lumière. SVP.C'est pas reellement un probleme de programation (enfin je crois pas). Mon problème consite simplement pb comprehension (int*) VC++ // TC++ [ par BarthOlivier ] Salut ,J'ai rencontré un truc marrant que je n'arrive pas a expliquer... voici le code :#include "stdafx.h"#include "stdio.h"#include "conio.h"#define SDL: La commande printf(""); n'affche rien! [ par yugiohjcj ] Bonjour,voici la source de mon programme:#include #include #include #define true 1int main(int argc, char *argv[]){ printf("\a"); if ( SDL_Init Problème pour un pendu [ par minet03 ] Bonjour tout le monde, je suis débutant et je tente de faire un pendu. Mais voilà, y a plin d'erreur que je ne comprend pas. Donc si qqu pouvais m'aid fifos [ par sparetime ] salut j'ai voulu essayé ce code /* Processus ecrivain */#include #include #include #include #include #include mai Lib ADO sous Visual C++ [ par callaghan1981 ] j ai inserer la librairie .h et les lib ds le projetmais ca na marche pas tro.si je compile #include"ADOlib.h"il me met une erreurcompiling...connect. VC++ et erreurs de compilations :( [ par morpheus83z ] Bonjour tout le monde !Voilà, je ne comprends pas, j'ai un programme qui ne veut pas se compiler et je désespère vraiment ...#include // iostream.h e probleme de LINK avec ADO [ par callaghan1981 ] bjrj ai un petit bleme de linksous ADO#include "stdafx.h"#include"ADOLib.h"#include "iostream.h"CWinApp theApp;ADOConnect myConn;int _tmain( int argc


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,402 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales