Maison >développement back-end >C++ >Pourquoi mon typedef dans un modèle de classe de base est-il inaccessible dans mon modèle de classe dérivé ?
Typedef non reconnu dans un modèle de classe dérivé
Lors de la déclaration d'un modèle de classe dérivé B qui hérite d'un modèle de classe de base A, il est prévu que les typedefs défini dans A serait accessible dans B. Cependant, dans l'exemple fourni, l'accès à Vec_t dans B échoue avec une erreur indiquant qu'il est non reconnu.
Selon la norme C (14.6.2/3), dans les définitions de modèles de classe et les définitions de membres, la recherche de nom non qualifié ne s'étend pas aux classes de base qui dépendent des paramètres du modèle. Cela signifie qu'un accès non qualifié aux typedefs définis dans la classe de base n'est pas autorisé dans le modèle de classe dérivée.
Pour résoudre ce problème, le nom complet du typedef doit être utilisé dans le modèle de classe dérivée. Ceci peut être réalisé en spécifiant explicitement la portée de la classe de base comme suit :
typename A<T>::Vec_t v;
En qualifiant explicitement le nom avec la portée de la classe de base, le compilateur peut résoudre correctement la référence au typedef Vec_t défini dans la classe de base. modèle.
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!