probleme héritage depuis VC8.0

Le
pascal57
Bonjour,

Voilà, j'ai un problème d'héritage dans visual studio 2005 que je n'avais pas dans les versions antérieures. Je ne peux pas utiliser une classe (ici la classe A) dans une méthode de classe (ici la classe C::MethodeC) qui par ailleurs hérite de la classe A en private d'un lointain aïeul.
Si vous connaissez une manière de contourner le problème tout en conservant la privatitude du lointain aïeul, merci de me répondre.

error C2247: 'A' non accessible, car 'B' utilise 'private' pour hériter de 'A'

class A
{
public:
int ValeurA;
};


class B : private A
{
public:
int ValeurB;
};


class C : private B
{
public:
void MethodeC();
};

void C::MethodeC()
{
class A toto;
}
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jean-Marc Bourguet
Le #21360801
pascal57
Bonjour,

Voilà, j'ai un problème d'héritage dans visual studio 2005 que je n'avais pas
dans les versions antérieures. Je ne peux pas utiliser une classe (ici la classe
A) dans une méthode de classe (ici la classe C::MethodeC) qui par ailleurs
hérite de la classe A en private d'un lointain aïeul.
Si vous connaissez une manière de contourner le problème tout en conservant la
privatitude du lointain aïeul, merci de me répondre.

error C2247: 'A' non accessible, car 'B' utilise 'private' pour hériter de 'A'

class A
{
public:
int ValeurA;
};


class B : private A
{
public:
int ValeurB;
};


class C : private B
{
public:
void MethodeC();
};

void C::MethodeC()
{
class A toto;
}



Les noms de classes sont injectes dans leur portee (scope). Et donc ici A est
trouve dans la portee de C ou effectivement il n'est pas accessible. Il
faut le chercher dans la portee globale (ou dans le namespace ou il est defini)

void C::MethodeC()
{
::A toto;
}

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
pascal57
Le #21360751
pascal57 a écrit le 11/03/2010 à 16h13 :
Bonjour,

Voilà, j'ai un problème d'héritage dans visual studio 2005
que je n'avais pas dans les versions antérieures. Je ne peux pas
utiliser une classe (ici la classe A) dans une méthode de classe (ici la
classe C::MethodeC) qui par ailleurs hérite de la classe A en private
d'un lointain aïeul.
Si vous connaissez une manière de contourner le problème tout en
conservant la privatitude du lointain aïeul, merci de me répondre.

error C2247: 'A' non accessible, car 'B' utilise 'private' pour hériter
de 'A'

class A
{
public:
int ValeurA;
};


class B : private A
{
public:
int ValeurB;
};


class C : private B
{
public:
void MethodeC();
};

void C::MethodeC()
{
class A toto;
}


du coup on comprend enfin la différence entre private et protected

solution :

class A
{
public:
int ValeurA;
};


class B : protected A
{
public:
int ValeurB;
};


class C : private B
{
public:
void MethodeC();
};

void C::MethodeC()
{
class A toto;
}
Publicité
Poster une réponse
Anonyme