Problème d'héritage à la suite

Résolu
theGrimReaper Messages postés 25 Date d'inscription dimanche 31 octobre 2010 Statut Membre Dernière intervention 18 janvier 2014 - 18 nov. 2013 à 18:43
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 19 nov. 2013 à 20:18
Bonjour,

Je viens à vous parce que ça fait 4h d'affilé que je cherche en vain à résoudre mon problème que je vais m'empresser de vous exposer en espérant qu'un d'entre vous pourra m'aider...

Problème :
Je n'arrive pas à faire hériter une classe petite-fille d'une classe fille (qui hérite elle même d'une classe mère)...

Avec un exemple ça parle plus,
j'ai une une classe FormeDeBase (abstraite mais la question n'est pas la vous verrez pourquoi)
une classe MultiSegment qui hérite de ma classe FormeDeBase.

jusque ici pas de problème, ça marche nickel, mais des que je veux faire hériter une classe Triangle qui hérite de MultiSegment ça marche plus.

Et le pire c'est que j'ai fait pas mal de test et j'arrive à la conclusion que le compilateur me laisse pas faire hériter d'une classe fille, ni d'une classe qui possède déjà une descendance...
Parce que j'ai réduit au minimum les classes et même un simple héritage plante dans les circonstances énoncées.

Voici ce que le compilateur me met comme erreur (pour les deux cas cités).
//dans le fichier Tiangle.hpp à la ligne de la déclaration de la classe
error: expected class-name before '{' token



Je vais vous mettre les codes et vous verrez il n'y a quasi rien et je comprend vraiment pas pourquoi ça plante... en plus un héritage foireux alors que c'est la base du C++, je suis vraiment perdu... xD

Voici mes codes :

Classe FormeDeBase :
#ifndef FormeDeBase_HPP
#define FormeDeBase_HPP

#include <iostream>

class FormeDeBase
{
};

#endif


Classe MultiSegment :
#ifndef TRIANGLE_HPP_INCLUDED
#define TRIANGLE_HPP_INCLUDED

#include <iostream>
#include "FormeDeBase.hpp"

class MultiSegment : public FormeDeBase
{
};

#endif // TRIANGLE_HPP_INCLUDED


Classe Triangle :
#ifndef TRIANGLE_HPP_INCLUDED
#define TRIANGLE_HPP_INCLUDED

#include <iostream>
#include "MultiSegment.hpp"

class Triangle : public MultiSegment
{
};

#endif // TRIANGLE_HPP_INCLUDED


Voilà et pour les fichiers .cpp des classes, ils sont vide, ils ne contiennent qu'une include de leur header respectifs.

Un exemple, MultiSegment.cpp :
#include "MultiSegment.hpp"

using namespace std;



Je suis vraiment renseigné, même sur les notions adjacentes liées à l'héritage, sur l'héritage multiple par exemple, mais c'est pas ça car les classes hérités virtuellement (virtual) ne sont pas utile dans ma situation...
Je veux faire qu'un simple héritage (une dérivation de classe) mais de deux étages (et plus après).
Ah et aussi, je pense pas que ce soit un problème d'inclusion multiple car j'ai protégé mes .hpp. Mais on sais jamais...

Si jamais quelqu'un veut mes fichiers complets, demandez, mais c'est clairement pas ça qui pose problème car les codes donnés tout simple ne compile pas quand même quand j'ajoute l'héritage de la classe Triangle...


Pour info je suis codeblocks v12.11, je sais pas si l'IDE entre en compte ou si c'est mingw qui est en cause, mais je préfère être complet pour vous donner un max d'éléments...


Voilà, si quelqu'un a une idée je suis preneur !!! ^^
Merci d'avance.

8 réponses

theGrimReaper Messages postés 25 Date d'inscription dimanche 31 octobre 2010 Statut Membre Dernière intervention 18 janvier 2014
18 nov. 2013 à 19:12
J'ai enfin trouvé après ces deux jours de galère !
Et je suis très idiot. :D

Ça vient d'une erreur d'étourderie, une faute d'inattention à la con... ^^
Pour les gens qui auraient le même problème que moi je tiens à vous dire de bien vérifier votre code.

J'me doutais que c'était un problème d'inclusion multiple mais j'étais pas sûr, mais maintenant je le suis...
J'avais mal protégé mes hpp, après un copié collé j'ai pas changé le nom de la classe à protéger.

Pour ceux que seraient curieux j'ai laissé la faute dans le code au dessus, regarder la protection dans le fichier MultiSegment.hpp.

Désolé d'avoir créer un sujet pour le résoudre juste après tout seul, mais ça pourrait aider les autres qui feraient pas gaffe aux inclusions de leur headers.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
18 nov. 2013 à 19:39
Bonjour.

Désolé d'avoir créer un sujet pour le résoudre juste après tout seul, mais ça pourrait aider les autres qui feraient pas gaffe aux inclusions de leur headers.
Je laisse le sujet ici, car celui-ci est bien rédigé, clair, poli, et en plus tu penses à écrire la réponse que tu as trouvé, plutôt que d'abandonner le forum dès la réponse trouvée (ce qui est rare). Si tous les posteurs étaient comme toi, ça serait vraiment bien :).

Petit PS:
Evite les using namespace, voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace
0
theGrimReaper Messages postés 25 Date d'inscription dimanche 31 octobre 2010 Statut Membre Dernière intervention 18 janvier 2014
Modifié par theGrimReaper le 18/11/2013 à 20:26
Il n'y a pas de quoi,
je préfère trouver des trucs clairs et complets, donc quand c'est moi qui demande, c'est pareil... Une forme de respect. ^^

Et merci, je vais regarder ce que tu m'as filé.

EDIT :
Effectivement javais pas encore décelé la subtilité des espaces de noms, c'est vrai que ne pas utiliser de using namespace c'est beaucoup plus propre et correct. Thanks du coup. :)
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
18 nov. 2013 à 21:45
Hello,

Bel esprit communautaire, bravo.
Je me permets de mettre ce topic en résolu du coup.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
theGrimReaper Messages postés 25 Date d'inscription dimanche 31 octobre 2010 Statut Membre Dernière intervention 18 janvier 2014
18 nov. 2013 à 23:13
T'as bien fait. Je savais pas si c'était à moi de mettre en résolu ou aux modos, n'ayant pas trouvé de boutons résolu, j'avais compris et du coup tu tombes bien. ^^
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
19 nov. 2013 à 09:05
Yop,
En théorie, étant donné que c'est toi qui pose la question, c'est à toi de la mettre en résolu. Tu peux trouver le lien juste en-dessous du titre ;)
0
theGrimReaper Messages postés 25 Date d'inscription dimanche 31 octobre 2010 Statut Membre Dernière intervention 18 janvier 2014
Modifié par cptpingu le 19/11/2013 à 19:58
Ok, au temps pour moi, pas vu désolé. ^^
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
19 nov. 2013 à 20:18
Pas de souci.
Comme tu l'as dit, je tombais bien ;)
0
Rejoignez-nous