Maison  >  Article  >  développement back-end  >  Erreur C++ : le type d'instanciation dérivé d'un modèle n'est pas autorisé, comment le résoudre ?

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

王林
王林original
2023-08-22 12:45:37693parcourir

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 {
    //...
};

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

MyClass<int> myObj;

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 {
    //...
};

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 {
    //...
};

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> {
    //...
};

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!

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