Rechercher : dans
Par :

Probleme Polymorphisme/Erreur de segmentation

Dernière réponse le 7 jun 2008 à 14:44:59 hobro, le 7 jun 2008 à 12:37:23 
 Signaler ce message aux modérateurs

Bonjour,

Je suis en train de faire un monopoly en c++, mais là j'ai un problème d'erreur de segmentation que je n'arrive pas à résoudre.
Je suis débutant donc je sais pas si j'arriverai à l'expliquer clairement.

Je vais tout d'abord mettre une partie de mon code :

class cases
{
protected :
string nom;
int pos;
int prix;
int loyer;
string proprietaire;

public :
cases(string _nom, int _pos, string indice_case);
string get_nom();
virtual int get_prix();
virtual int get_loyer();
};

cases::cases(string _nom, int _pos, string indice_case)
{
nom=_nom;
pos=_pos;
proprietaire="aucun";

if(indice_case=="Gare")
prix=2500;
if(indice_case=="Propriete")
prix=_pos*1000;
if(indice_case=="Compagnie")
prix=2500;
if(indice_case=="Autre")
prix=0;

if(indice_case=="Gare")
loyer=500;
if(indice_case=="Propriete")
loyer=_pos*100;
if(indice_case=="Autre")
loyer=0;
if(indice_case=="Compagnie")
loyer=0;
}

class cPropriete : public cases
{
public :
cPropriete(int _pos) : cases("Propriete",_pos,"Propriete") {};
int get_loyer();
int get_prix();
};

class Plateau
{
public :
cases* table[2];
Plateau();
};

Plateau::Plateau()
{
table[1]=new cPropriete(25);
table[2]=new cPropriete(13);
}

Voila plusieurs scénario d'affichage :

int main()
{
Plateau test2;
cout<<test2.table[1]->get_prix()<<endl; //Affiche le loyer au lieu de prix
puts("ok"); //Affiche "ok" puis suivi d'erreur de segmentation, fin de l'éxécution
cout<<test2.table[1]->get_loyer()<<endl;
}

int main()
{
Plateau test2;
cout<<test2.table[1]->get_prix()<<endl; //Affiche le loyer au lieu de prix, puis suivi d'erreur de segmentation, FIN
}

int main()
{
Plateau test2;
cout<<test2.table[1]->get_loyer()<<endl; //Erreur de segmentation directe, FIN
puts("ok");
cout<<test2.table[1]->get_prix()<<endl;
}

Les méthodes get_loyer et get_prix retourne juste la valeur de loyer et de prix.
Voilà, si vous pouvez m'aider, merci d'avance, et puis au passge, pouvez vous me dire si ce code est bien structuré ou tout autre remarque qui pourrai me servir.

Merci encore.

Configuration: Linux
Firefox 3.0

Meilleures réponses pour « Probleme Polymorphisme/Erreur de segmentation » dans :
[Langage C] C/C++ Erreur de segmentation Voir Qu'est ce qu'une erreur de segmentation Vous êtes en train de développer une application sous Linux en C/C++. Tout va bien, ça compile, les oiseaux chantent. Donc vous lancez votre application pour la tester. Et vous obtenez l'un de ces deux...
Codes d'erreur de Windows VoirLa liste ci-dessous détaille les codes d'erreur s'affichant dans les boîtes de dialogue sous Windows : Code Description ------------------------ 1 Fonction incorrecte. 2 Le fichier spécifié est introuvable. 3 Le chemin d'accès spécifié...
[MSN] Erreurs 0x80072ee6 - problème de connexion VoirErreurs 0x80072ee6 Pour résoudre ce problème, supprimer les cookies, vider le cache et l'historique du navigateur Internet Explorer. Puis cliquer sur Démarrer / Exécuter et saisir : regsvr32 MSXML3.dll Enfin, redémarrer l'ordinateur pour...
[IE] Erreur de script / Effectuer un débogage VoirDe temps en temps, lorsque vous naviguez sur le Net et que vous chargez une page Web, un message d'erreur de script survient : Une erreur est survenue. Une erreur est survenue sur le script de cette page. Souhaitez-vous effectuer un débogage...
Le contrôle des erreurs VoirLe contrôle d'erreurs Le codage binaire est très pratique pour une utilisation dans des appareils électroniques tels qu'un ordinateur, dans lesquels l'information peut être codée grâce à la présence ou non d'un signal électrique. Cependant le...
POO - Le polymorphisme VoirDéfinition du polymorphisme Le nom de polymorphisme vient du grec et signifie qui peut prendre plusieurs formes. Cette caractéristique est un des concepts essentiels de la programmation orientée objet. Alors que l'héritage concerne les classes (et...
Segmentation de la mémoire en assembleur VoirQu'est-ce que la segmentation de la mémoire ? En assembleur, on appelle segment de mémoire le mécanisme de base de la gestion des adresses pour des processeurs de type 80x86. Les instructions sont stockées dans le registre IP. Il s'agit d'adresses...

1

 hobro, le 7 jun 2008 à 14:44:59

Je viens de découvrir que si je supprime une des méthodes virtuelles déclarées dans la classe cases, et que j'appelle la non supprimer dans le main, et bien ca marche très bien.
Mais dès que je mets les deux dans un certain ordre dans la classe cases, et que je les appelle dans le même ordre dans le main, la premiere méthode est appelé et affiche ce qu'on attend, mais après, erreur de segmentation. Par contre si dans le main j'appelle les fonctions dans l'autre ordre, j'ai directement une erreur de segmentation. Il me suffit d'inverser les delclarations des méthodes virtuelles dans la classes cases afin d'avoir le même ordre dans me main et la classe cases, et j'ai donc l'affichage de la premiere methode suivi d'une erreur de segmentation.

Je me dis donc que le probleme viens de mes déclaration de méthodes virtuelles, mais je vois pas du tout comment y remédier.

Merci d'avance pour l'aide apporter.

Répondre à hobro
Collection CommentÇaMarche.net