Problème d'héritage à la suite [Résolu]

theGrimReaper 25 Messages postés dimanche 31 octobre 2010Date d'inscription 18 janvier 2014 Dernière intervention - 18 nov. 2013 à 18:43 - Dernière réponse : BunoCS 14176 Messages postés lundi 11 juillet 2005Date d'inscriptionModérateurStatut 18 octobre 2018 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

8 réponses

theGrimReaper 25 Messages postés dimanche 31 octobre 2010Date d'inscription 18 janvier 2014 Dernière intervention - 18 nov. 2013 à 19:12
0
Merci
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.
Commenter la réponse de theGrimReaper
cptpingu 3827 Messages postés dimanche 12 décembre 2004Date d'inscriptionModérateurStatut 6 octobre 2018 Dernière intervention - 18 nov. 2013 à 19:39
0
Merci
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
Commenter la réponse de cptpingu
theGrimReaper 25 Messages postés dimanche 31 octobre 2010Date d'inscription 18 janvier 2014 Dernière intervention - Modifié par theGrimReaper le 18/11/2013 à 20:26
0
Merci
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. :)
Commenter la réponse de theGrimReaper
BunoCS 14176 Messages postés lundi 11 juillet 2005Date d'inscriptionModérateurStatut 18 octobre 2018 Dernière intervention - 18 nov. 2013 à 21:45
0
Merci
Hello,

Bel esprit communautaire, bravo.
Je me permets de mettre ce topic en résolu du coup.
Commenter la réponse de BunoCS
theGrimReaper 25 Messages postés dimanche 31 octobre 2010Date d'inscription 18 janvier 2014 Dernière intervention - 18 nov. 2013 à 23:13
0
Merci
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. ^^
Commenter la réponse de theGrimReaper
BunoCS 14176 Messages postés lundi 11 juillet 2005Date d'inscriptionModérateurStatut 18 octobre 2018 Dernière intervention - 19 nov. 2013 à 09:05
0
Merci
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 ;)
Commenter la réponse de BunoCS
theGrimReaper 25 Messages postés dimanche 31 octobre 2010Date d'inscription 18 janvier 2014 Dernière intervention - Modifié par cptpingu le 19/11/2013 à 19:58
0
Merci
Ok, au temps pour moi, pas vu désolé. ^^
Commenter la réponse de theGrimReaper
BunoCS 14176 Messages postés lundi 11 juillet 2005Date d'inscriptionModérateurStatut 18 octobre 2018 Dernière intervention - 19 nov. 2013 à 20:18
0
Merci
Pas de souci.
Comme tu l'as dit, je tombais bien ;)
Commenter la réponse de BunoCS

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.