Maison  >  Article  >  développement back-end  >  Pourquoi ne puis-je pas accéder aux membres de la classe de base dans une classe dérivée d'un modèle avec GCC ?

Pourquoi ne puis-je pas accéder aux membres de la classe de base dans une classe dérivée d'un modèle avec GCC ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-02 16:08:02932parcourir

Why Can't I Access Base Class Members in a Template-Derived Class with GCC?

Erreur de compilation GCC : accès au membre de la classe de base dépendant de l'argument du modèle

En C, lors de l'héritage d'une classe modèle, l'accès aux membres de la La classe de base au sein de la classe dérivée peut parfois poser un défi, comme l'a rencontré cet utilisateur. Un extrait de code est fourni :

<code class="cpp">template <typename T> class A {
public:
    T foo;
};

template <typename T> class B: public A<T> {
public:
    void bar() { cout << foo << endl; }
};</code>

Lors de la compilation de ce code avec GCC, l'utilisateur rencontre l'erreur :

error: ‘foo’ was not declared in this scope

Cependant, le membre problématique 'foo' doit être accessible dans le classe dérivée.

Le problème vient du fait que, en C 11 et versions ultérieures, le compilateur n'est plus autorisé à déduire automatiquement les types de variables dans les modèles imbriqués. Cette restriction empêche le compilateur de déduire l'existence du membre 'foo' dans la classe de base lors de la compilation de la classe dérivée.

Pour résoudre le problème, le membre est accessible explicitement via le nom de la classe de base :

<code class="cpp">void bar() { cout << A<T>::foo << endl; }

Alternativement, le pointeur 'this' peut être utilisé :

<code class="cpp">void bar() { cout << this->foo << endl; }</code>

Ces solutions indiquent explicitement que le membre 'foo' appartient à la classe de base, garantissant que le compilateur peut identifier correctement et résoudre son utilisation.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn