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

Pourquoi GCC renvoie-t-il une erreur « Non déclaré » lors de l'accès aux membres de la classe de base dans un modèle ?

Patricia Arquette
Libérer: 2024-11-02 11:15:02
original
515 Les gens l'ont consulté

Why Does GCC Throw a

Piège GCC : accès aux membres de la classe de base avec dépendance d'argument de modèle

Ce code présente une erreur de compilation déroutante dans GCC mais réussit dans Visual Studio :

template <typename T> class A {
public:
    T foo;
};

template <typename T> class B: public A<T> {
public:
    void bar() { cout << foo << endl; }
};
Copier après la connexion

GCC génère une erreur : "foo' n'a pas été déclaré dans cette portée", bien qu'il soit membre de la classe de base. Cependant, modifier le code pour référencer explicitement le membre de la classe de base via "this->foo" résout le problème.

Explication

GCC suit la norme C, qui interdit l'inférence des membres de la classe de base lors de la compilation du modèle. Dans les versions antérieures, GCC déduisait les membres en analysant la classe de base, mais cela pouvait entraîner des conflits.

Pour résoudre ce problème, garantissez un accès explicite aux membres de la classe de base dans les modèles :

  • Utilisez "this" pour référencer le membre :

    void bar() { cout << this->foo << endl; }
    Copier après la connexion
  • Spécifiez le nom de la classe de base :

    void bar() { cout << A<T>::foo << endl; }
    Copier après la connexion

En adhérant à Grâce à ces directives, les développeurs peuvent éviter les erreurs de compilation et garantir que GCC gère l'accès aux membres de la classe de base comme prévu dans les modèles. Plus de détails sont disponibles dans le manuel GCC.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!