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 :
<code class="cpp">void bar() { cout << this->foo << endl; }
<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 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!