Salarie : public Personne
{
.........................
void afficher();
........................
}
Directeur : public Salarie
{
.........................
void afficher();
}
avec l'outils de dev KDEV:
il n'y a pas de problème si j'elimine Directeur.
avec Directeur, le compilateur genere une erreur sur le vtab (tout va bien si le mis afficher en commentaire), portant je l'ai declaré virtuel dans Personne.
merci de me repondre.
cordialement.
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 16 déc. 2006 à 15:48
Salarie : public Personne
{
.........................
void afficher();
........................
}
Par défaut, afficher() est ici private.
Ton héritage est public, donc pas d'accès.
(à moins que tu n'ai pas tout mis dans l'exemple)
de plus je pense qu'il faut remettre virtual ici.
redha_0172
Messages postés2Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention17 décembre 2006 17 déc. 2006 à 00:27
salut,
la declaration de la méthode afficher() est public aussi virtual.
j'ai trouvé une solution, mais un peu compliquer;
j'ai ajouté la methode dans la classe Personne la declaration suivante:
virtual Personne* clone() const=0;
ensuite dans les autres:
Salarie:
Salarie* clone() const { return new Salarie()};
Directeur:
Directeur* clone() const { return new Directeur()};
Commercial:
Commercial* clone() const { return new Commercial()};
de cette façon tout va bien.
cordialement.