pDecrypter = new Computer(duplicates)
un nouvel objet de type Computer est créé
Computer::Computer(bool dupes):
Decrypter(dupes), total(0), mySmartString(0)
Ensuite il ya pDecrypter->Play();
A ce moment là pdecrypter affiche seulement les variables protected(de la classe DECRYPTER)
cependant il va bien dans Computer:lay
if (!mySmartString)
mySmartString = new SmartString(duplicates);
et là je me rends compte avec stupéfaction que mySmartString est rempli avec n'importe quoi!!! et ça me plante tout!! segmentation defaultPouvez vous m'aider et me dire ce qui s'est passé.
La variable total contient également n'importe quoi
D'autre part comment peut on initialiser un pointeur à 0 sans avoir appelé le constructeur?
J'ai relu plusieurs fois ton post et impossible de comprendre.
Le seul truc que qui me choque dans ton code c'est les forward declaration des classes ... (bonjour le typage ...)
Dans ton computer.hpp par exemple tu fais une déclaration de la class SmartString mais elle n'est pas défini (sinon tu n'aurai pas a faire la déclaration) donc le compilo sera incapable de faire son boulot proprement.
Bref, vire la déclaration de la class et fait un include du header de la classe SmartString. Au passage, je te conseille fortement de lire les coding standard (http://www.possibility.com/Cpp/CppCodingStandard.html)qui stipulent que quand un objet a besoin de l'include d'un autre objet, il faut systématiquement le mettre dans son .hpp et cela même s'il sera inclu en amont par un autre header.
Cette erreur est présente dans les autres classes que tu nous montre.
Personnellement, les seule fois ou je fais des forward declaration c'est quand j'ai besoin de définir des fonction callback static avec un typedef avant de définir une classe.
ok merci mais effectivement quelle est la différence entre mettre le header et mettre la class? je n'ai pas bien saisi
D'autre part, ça ne résout en rien mon pb pourquoi je pers les données private de computer?
Ta classe Computer dérive de Decrypter donc Computer à besoin de connaître de quoi est constitué la classe Decrypter (variables, méthodes, enum ...) c'est pour ça que tu inclu le fichier decrypter1101.hpp.
Et bien c'est pareil pour la classe SmartString, Computer a besoin de savoir de quoi est constitué cette classe donc il faut que tu mettes une directive #include "SmartString.hpp"
alors en fait j'ai mis le include smartstring mais celui-ci était présent dans computer.cpp.Même avec ça ça ne change rien.
En fait juste avant la ligne pDecrypter->Play (qui est dans game.cpp), pDecrypter est considéré alors comme un objet de type DECRYPTER avec la definition de DECRYPTER ( c normal qu'il ne soit pas considéré comme computer?)et quand je me debranche dans COMPUTER :: PLAY, alors le pointeur this est considéré comme un objet COMPUTER mais là "smartstring" ET "total" sont initialisés avec n'importe quoi.
Donc, ça n'a rien changé!!
Je viens de relire ton message précédent.
Tu m'as tout l'air de tenter d'utiliser une variable dans le scope de Computer par le biais d'un objet Decrypter (je me demande bien comment ça compile ... mais bon ..)
Bref, si tu veux une confirmation, montre moi ton code ...
Je m'excuse pour cette bonne grosse question de newb... Mais ca sert à quoi un hpp ? c'est la contraction entre un .h et un .cpp ? C'est quoi l'intéret par rapport à une compilation séparée classique ?
D'apres ce que j'ai pu voir, mySmartString est un pointeur.
Donc si tu veux tester s'il est initialise, tu testes si le pointeur est NULL et pas s'il vaut 0.
Je viens de relire ton message précédent.
Tu m'as tout l'air de tenter d'utiliser une variable dans le scope de Computer par le biais d'un objet Decrypter (je me demande bien comment ça compile ... mais bon ..)
Bref, si tu veux une confirmation, montre moi ton code ...
J'étais partie en vacances.
Effectivement, l'erreur viendrait plutôt de là sachant que je pers également ma deuxième variable membre total ( indépendant de SmartString).Mais les classes human et computer sont des classes dérivées de Decrypter.