Maison > développement back-end > C++ > le corps du texte

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
Libérer: 2024-11-02 16:08:02
original
986 Les gens l'ont consulté

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>
Copier après la connexion

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

error: ‘foo’ was not declared in this scope
Copier après la connexion

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; }
Copier après la connexion

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

<code class="cpp">void bar() { cout << this->foo << endl; }</code>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal