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

Pourquoi ne puis-je pas accéder aux membres de la classe de base dans une fonction de modèle avec GCC ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-01 15:50:02941parcourir

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

Utilisation d'un membre de classe de base dans un modèle

Le code fourni ne parvient pas à être compilé avec GCC mais réussit avec Visual Studio. Lors de la tentative d'accès au membre foo de la classe de base dans la fonction bar, GCC rencontre une erreur affirmant que foo n'est pas déclaré dans la portée actuelle.

Selon les spécifications officielles C, GCC adhère à certaines règles qui empêcher le compilateur de déduire les membres de la classe de base si la classe de base est une classe modèle. En effet, sans connaissance directe de la définition de la classe de base, le compilateur ne peut pas déterminer ses membres.

Pour résoudre ce problème, il existe deux options :

  1. Utilisez le pointeur this vers accéder explicitement au membre de la classe de base :
<code class="cpp">void bar() { cout << this->foo << endl; }
  1. Spécifiez explicitement le nom de la classe de base :
<code class="cpp">void bar() { cout << A<T>::foo << endl; }

Cela permet à GCC de reconnaître le membre foo comme appartenant à la classe de base A.

Par conséquent, la syntaxe correcte pour accéder aux membres de la classe de base dans une classe modèle est this->foo ou A::foo.

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