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

Erreur C++ : le type d'instanciation dérivé d'un modèle n'est pas autorisé, comment le résoudre ?

王林
Libérer: 2023-08-22 12:45:37
original
741 Les gens l'ont consulté

Erreur C++ : le type dinstanciation dérivé dun modèle nest pas autorisé, comment le résoudre ?

Dans le langage de programmation C++, lorsque nous utilisons des types instanciés de modèles dans des classes dérivées, nous pouvons rencontrer l'erreur du compilateur "Dérivé des types instanciés de modèles non autorisés". La raison de cette erreur est que nous essayons de dériver une nouvelle sous-classe à partir d'un type instancié de modèle, qui n'est pas lui-même une classe. Cet article expliquera la cause de l'erreur et fournira une solution au problème.

1. Cause de l'erreur

Template est un outil de programmation général. Il peut être utilisé pour créer des classes ou des fonctions et peut être instancié en fonction de différents types de données. Lors de l'utilisation de modèles, les paramètres du modèle doivent être spécifiés. En C++, lors de l'utilisation d'un modèle de classe, le nom de la classe doit être suivi d'une liste de paramètres. Par exemple :

template<typename T>
class MyClass {
    //...
};
Copier après la connexion

Lorsque nous utilisons ce modèle de classe, nous devons fournir un type concret :

MyClass<int> myObj;
Copier après la connexion

Cela créera une spécialisation int du modèle MyClass.

Cependant, lorsque nous utilisons des types instanciés de modèles dans des classes dérivées, nous rencontrerons l'erreur ci-dessus, par exemple :

template<typename T>
class MyClass {
    //...
};

class MyDerivedClass: public MyClass {
    //...
};
Copier après la connexion

Ce code affichera l'erreur "La dérivation à partir de types instanciés de modèles n'est pas autorisée".

La raison de cette erreur est que MyClass est en fait un type d'instanciation de modèle, pas une vraie classe. Par conséquent, essayer de dériver une nouvelle sous-classe à partir d’un type instancié de modèle provoquera l’erreur ci-dessus.

2. Solution

  1. Utiliser les paramètres du modèle

Afin de résoudre ce problème, nous pouvons utiliser les paramètres du modèle pour spécifier la classe à dériver. Par exemple, si nous voulons dériver une nouvelle classe de MyClass, nous pouvons écrire comme ceci :

template<typename T>
class MyClass {
    //...
};

template
class MyDerivedClass: public MyClass {
    //...
};
Copier après la connexion

Cela évitera les erreurs.

  1. Utiliser un alias de modèle

De plus, nous pouvons également utiliser un alias de modèle (alias de modèle) pour résoudre ce problème. Les alias de modèle peuvent fournir un nouveau nom pour un modèle, ce qui nous permet de l'utiliser facilement dans le programme. Par exemple, dans le code ci-dessus, l'alias du modèle peut être défini comme ceci :

template<typename T>
using MyNewClass = MyClass<T>;

class MyDerivedClass: public MyNewClass<int> {
    //...
};
Copier après la connexion

De cette façon, une classe peut être dérivée d'un alias de modèle.

Résumé

En C++, l'utilisation de modèles est une pratique très courante, mais lors de l'utilisation de types instanciés de modèles dans des classes dérivées, il est facile de rencontrer l'erreur du compilateur "Dérivé des types instanciés de modèles non autorisés". Il existe deux solutions : l'une consiste à utiliser les paramètres du modèle pour spécifier la classe à dériver, et l'autre consiste à utiliser des alias de modèle pour fournir un nouveau nom au modèle. Grâce aux méthodes ci-dessus, nous pouvons facilement résoudre ce problème.

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!

Étiquettes associées:
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal