| | Premium | Posté le 23/02/2007 @ 17:27 | Petit astucien
205 Messages
| Bonjour, j'ai une classe Personne : Personne.hh : #ifndef PERSONNE_HH #define PERSONNE_HH
#include "Plage.hh"
class Personne{ protected: int indice_colonne; int heure_arrivee; int heure_depart; public: Personne(int indice_colonne, int heure_arrivee, int heure_depart); void emplacement(Plage & plage); int getColonne(); int getArrivee(); int getDepart(); };
#endif Personne.cc #include <iostream> #include "Personne.hh" #include "Plage.hh"
Personne::Personne(int indice_colonne, int heure_arrivee, int heure_depart ){ if(indice_colonne < 0 || indice_colonne >= NBCOLONNES) printf("indice de colonne incorrecte\n"); if(heure_arrivee < 0 || heure_arrivee > 24 || heure_depart < 0 || heure_depart > 24) printf("heure incorrecte\n"); this->indice_colonne = indice_colonne; this->heure_arrivee = heure_arrivee; this->heure_depart = heure_depart; }
void Personne::emplacement(Plage & plage){ int ligne = plage.hasard(0,NBLIGNES-1); int colonne = plage.hasard(0,NBCOLONNES-1); plage.inserer(ligne,colonne); }
int Personne::getColonne(){ return indice_colonne; }
int Personne::getArrivee(){ return heure_arrivee; }
int Personne::getDepart(){ return heure_depart; }
et une autre classe Glacier qui hérite de Personne : Glacier.hh : #ifndef GLACIER_HH #define GLACIER_HH
#include "Personne.hh"
class Glacier:public Personne{ private: int indice_ligne; public: Glacier(int indice_colonne, int heure_arrivee, int heure_depart); int getLigne(); void affiche(); };
#endif
Glacier.cc : #include <stdlib.h> #include <iostream>
#include "Glacier.hh" #include "Personne.hh"
Glacier::Glacier(int indice_colonne, int heure_arrivee, int heure_depart){ Personne(indice_colonne, heure_arrivee, heure_depart); }
int Glacier::getLigne(){ return indice_ligne; }
void Glacier::affiche(){ printf("le glacier est a la case %,%\n",getLigne(), getColonne()); printf("Arrivee : %d, Depart : %d\n", getArrivee(), getDepart()); }
int main(){ Glacier g(3, 8, 18); g.affiche(); return 0; }
A la compilation, j'obtiens toutes ces erreurs que je ne comprends pas. Je débute en C++ : Glacier.cc: Dans constructor « Glacier::Glacier(int, int, int) »: Glacier.cc:7: error: no matching function for call to `Personne::Personne()' Personne.hh:6: error: candidates are: Personne::Personne(const Personne&) Personne.hh:13: error: Personne::Personne(int, int, int)
Pourriez-vous m'indiquer comment corriger cela et m'indiquer comment s'utilise les exceptions car je ne saisis pas très bien. Par exemple dans le constructeur Personne, j'aimerai lever une exception au lieu de mettre les printf Merci
| | |
| |
| Publicité |
|
| | AlexPrince | Posté le 24/02/2007 à 05:32 | Petit astucien
398 Messages
| Change Glacier::Glacier(int indice_colonne, int heure_arrivee, int heure_depart){ Personne(indice_colonne, heure_arrivee, heure_depart); } Pour Glacier::Glacier(int indice_colonne, int heure_arrivee, int heure_depart) : Personne(indice_colonne, heure_arrivee, heure_depart) { } Je te conseille aussi de ne jamais inclure aucun en-tête dans un fichier d'implémentation (.c, .cpp, .cc ...), met les plutôt dans le fichier d'en-tête correspondant. | | | | | koala01 | Posté le 27/02/2007 à 13:03 | Astucien
4715 Messages
| AlexPrince a écrit :
Je te conseille aussi de ne jamais inclure aucun en-tête dans un fichier d'implémentation (.c, .cpp, .cc ...), met les plutôt dans le fichier d'en-tête correspondant.
Salut, Juste sur ce point bien précis: L'inclusion des fichiers d'entetes dans le fichier d'implémentation qui en a besoin et la prédéclaration des classes nécessaire permet d'obtenir une compilation bien plus rapide en cas de modification, en permettant de ne recompiler que les fichiers qui ont effectivement été modifiés alors tous les fichiers inclus dans un .h et ses dépendances (les .cpp correspondants) devront etre recompilés si un seul des fichiers inclus (ou ses dépendances) a été modifé Cela permet, en outre, de s'affranchir de certaines difficultés propres au "références croisées" (la classe A qui a un membre du type de la classe B qui a, lui meme un membre du type de la classe A...) Evidemment, cela sous-entend que l'on se trouve dans une situation dans laquelle il est effectivement possible de recourrir à cette technique... L'éritage étant, justement, une situtation dans laquelle cette technique n'est pas applicable | | | |
| | Haut de la page |
| | Inscrivez-vous ! |
- Posez vos questions
- Résolvez vos problèmes
- Aidez les autres
- Participez et créez vos discussions
- Dialoguez en privé avec d'autres membres
- Suivez vos sujets préférés
- Affichez les signatures des membres
|
|