class A
{
public:
virtual ~A() {}
protected:
virtual void toto() = 0;
};
class B : public A
{
public:
virtual ~B() {}
void func()
{
A &a = *this;
a.toto();
}
protected:
void toto() {}
};
Pourquoi gcc me renvoie-t'il "error: virtual void A::toto() is
protected" à la ligne "a.toto();" ?
Pourtant toto() est déclarée en protected, je ne vois pas le soucis.
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
Azuriel writes:
Pourquoi gcc me renvoie-t'il "error: virtual void A::toto() is protected" à la ligne "a.toto();" ? Pourtant toto() est déclarée en protected, je ne vois pas le soucis.
On ne peut appeler un membre protected dans une classe que si l'objet sur lequel on appelle le membre a pour type statique la classe ou un de ses descendants.
A+
-- 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
Azuriel <azuriel@nospam.fr> writes:
Pourquoi gcc me renvoie-t'il "error: virtual void A::toto() is
protected" à la ligne "a.toto();" ? Pourtant toto() est déclarée en
protected, je ne vois pas le soucis.
On ne peut appeler un membre protected dans une classe que si l'objet sur
lequel on appelle le membre a pour type statique la classe ou un de ses
descendants.
A+
--
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
Pourquoi gcc me renvoie-t'il "error: virtual void A::toto() is protected" à la ligne "a.toto();" ? Pourtant toto() est déclarée en protected, je ne vois pas le soucis.
On ne peut appeler un membre protected dans une classe que si l'objet sur lequel on appelle le membre a pour type statique la classe ou un de ses descendants.
A+
-- 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
Azuriel
Azuriel writes:
Pourquoi gcc me renvoie-t'il "error: virtual void A::toto() is protected" à la ligne "a.toto();" ? Pourtant toto() est déclarée en protected, je ne vois pas le soucis.
On ne peut appeler un membre protected dans une classe que si l'objet sur lequel on appelle le membre a pour type statique la classe ou un de ses descendants.
A+
Ok, je comprends, merci, mais je n'arrive pas à trouver ça cohérent du point du vue du paradigme objet. Vous pouvez éclairer ma lanterne ?
Azuriel <azuriel@nospam.fr> writes:
Pourquoi gcc me renvoie-t'il "error: virtual void A::toto() is
protected" à la ligne "a.toto();" ? Pourtant toto() est déclarée en
protected, je ne vois pas le soucis.
On ne peut appeler un membre protected dans une classe que si l'objet sur
lequel on appelle le membre a pour type statique la classe ou un de ses
descendants.
A+
Ok, je comprends, merci, mais je n'arrive pas à trouver ça cohérent du
point du vue du paradigme objet.
Vous pouvez éclairer ma lanterne ?
Pourquoi gcc me renvoie-t'il "error: virtual void A::toto() is protected" à la ligne "a.toto();" ? Pourtant toto() est déclarée en protected, je ne vois pas le soucis.
On ne peut appeler un membre protected dans une classe que si l'objet sur lequel on appelle le membre a pour type statique la classe ou un de ses descendants.
A+
Ok, je comprends, merci, mais je n'arrive pas à trouver ça cohérent du point du vue du paradigme objet. Vous pouvez éclairer ma lanterne ?
Michael DOUBEZ
Azuriel writes:
Pourquoi gcc me renvoie-t'il "error: virtual void A::toto() is protected" à la ligne "a.toto();" ? Pourtant toto() est déclarée en protected, je ne vois pas le soucis.
On ne peut appeler un membre protected dans une classe que si l'objet sur lequel on appelle le membre a pour type statique la classe ou un de ses descendants.
Pour être totalement correct, c'est aussi possible d'appeler un membre protected à partir d'une class friend.
Michael
Azuriel <azuriel@nospam.fr> writes:
Pourquoi gcc me renvoie-t'il "error: virtual void A::toto() is
protected" à la ligne "a.toto();" ? Pourtant toto() est déclarée en
protected, je ne vois pas le soucis.
On ne peut appeler un membre protected dans une classe que si l'objet sur
lequel on appelle le membre a pour type statique la classe ou un de ses
descendants.
Pour être totalement correct, c'est aussi possible d'appeler un membre
protected à partir d'une class friend.
Pourquoi gcc me renvoie-t'il "error: virtual void A::toto() is protected" à la ligne "a.toto();" ? Pourtant toto() est déclarée en protected, je ne vois pas le soucis.
On ne peut appeler un membre protected dans une classe que si l'objet sur lequel on appelle le membre a pour type statique la classe ou un de ses descendants.
Pour être totalement correct, c'est aussi possible d'appeler un membre protected à partir d'une class friend.
Michael
alexandre
Ok, je comprends, merci, mais je n'arrive pas à trouver ça cohérent du point du vue du paradigme objet. Vous pouvez éclairer ma lanterne ?
protected est une sorte de "private" mais autorisant un accès pour les héritiers. Dans ton cas, la fonction est globale (donc ni membre ni membre d'une héritière) et donc un membre "protected" est inaccessible. C'est tout à fait cohérent : le principe de base est l'encaspulation, ie la séparation de l'interface (ce qui est public) avec l'implémentation (ce qui est privé). La notino de protégé rend l'implémentation modifiable & utilisable dans l'héritage, c'est tout.
Ok, je comprends, merci, mais je n'arrive pas à trouver ça cohérent du
point du vue du paradigme objet.
Vous pouvez éclairer ma lanterne ?
protected est une sorte de "private" mais autorisant un accès pour les
héritiers. Dans ton cas, la fonction est globale (donc ni membre ni membre
d'une héritière) et donc un membre "protected" est inaccessible. C'est tout
à fait cohérent : le principe de base est l'encaspulation, ie la séparation
de l'interface (ce qui est public) avec l'implémentation (ce qui est privé).
La notino de protégé rend l'implémentation modifiable & utilisable dans
l'héritage, c'est tout.
Ok, je comprends, merci, mais je n'arrive pas à trouver ça cohérent du point du vue du paradigme objet. Vous pouvez éclairer ma lanterne ?
protected est une sorte de "private" mais autorisant un accès pour les héritiers. Dans ton cas, la fonction est globale (donc ni membre ni membre d'une héritière) et donc un membre "protected" est inaccessible. C'est tout à fait cohérent : le principe de base est l'encaspulation, ie la séparation de l'interface (ce qui est public) avec l'implémentation (ce qui est privé). La notino de protégé rend l'implémentation modifiable & utilisable dans l'héritage, c'est tout.