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'
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
pascal57 <pascal57@domain-xyz.in> 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
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
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; }
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
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