Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

probleme héritage depuis VC8.0

2 réponses
Avatar
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;
}

2 réponses

Avatar
Jean-Marc Bourguet
pascal57 writes:

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
Avatar
pascal57
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;
}