Maison > développement back-end > C++ > Erreur de syntaxe C++ : les types non-modèles ne peuvent pas être utilisés dans les paramètres du modèle, comment la résoudre ?

Erreur de syntaxe C++ : les types non-modèles ne peuvent pas être utilisés dans les paramètres du modèle, comment la résoudre ?

王林
Libérer: 2023-08-22 11:37:50
original
1208 Les gens l'ont consulté

Erreur de syntaxe C++ : les types non-modèles ne peuvent pas être utilisés dans les paramètres du modèle, comment la résoudre ?

Dans la programmation de modèles C++, nous pouvons utiliser une classe non-modèle comme paramètre de modèle, mais il existe certaines restrictions sur cette utilisation. Lorsque vous essayez d'utiliser un type non-modèle comme paramètre de modèle, vous pouvez rencontrer l'erreur « Les types non-modèles ne peuvent pas être utilisés dans les paramètres de modèle. » Cette erreur se produit généralement car le compilateur C++ ne peut pas déterminer comment gérer le type non-modèle.

Dans cet article, nous discuterons des causes de cette erreur et comment y remédier. Nous explorerons d’abord les causes de cette erreur, puis discuterons des moyens de la résoudre.

Cause de l'erreur

Lorsque nous écrivons le code suivant :

template <class T, int N>
class MyClass {
    T array[N];
    // some code here
};

MyClass<int, 10> myClass;
Copier après la connexion

MyClass dans le code est une classe modèle, qui a deux paramètres de modèle T et N. T est un type de données et N est un entier. Après traitement par le compilateur, myClass doit être une instance de la classe MyClass, où le type T est int , La valeur de N est 10. MyClass是一个模板类,它有两个模板参数TNT是一个数据类型,N是一个整数。经过编译器的处理后,myClass应该是一个MyClass类的实例,其中T类型为intN值为10

问题出在当我们试图将一个非模板类型作为模板参数来使用时,就会产生错误,例如:

template <class T, int N, double D>
class MyClass2 {
    // some code here
};

MyClass2<int, 10, 3.14> myClass2;
Copier après la connexion

这个代码将double类型的值3.14作为了MyClass2类的第三个模板参数。这是错误的,因为double类型不是一个模板参数,不能在模板参数中使用。

然而,有时我们可能会尝试将一个非模板类作为模板参数来使用。这时,我们可能会遇到“非模板类型不能在模板参数中使用”的错误。例如:

class MyClass3 {
    // some code here
};

template <class T, MyClass3 myClass3>
class MyClass4 {
    // some code here
};

MyClass4<int, MyClass3> myClass4;
Copier après la connexion

这个代码定义了一个名为MyClass4的模板类,其中的第二个模板参数是一个名为myClass3的实例,该实例是MyClass3类的一个对象。在定义myClass4时,我们将MyClass3作为MyClass4的第二个模板参数。然而,这是错误的,因为MyClass3不是一个模板参数,不能在模板参数中使用。

解决方法

有一种方法可以解决这个错误,即将非模板类改为模板类。

template <typename T>
class MyClass5 {
    // some code here
};

template <class T, template <typename> class N>
class MyClass6 {
    N<T> myClass;
    // some code here
};

MyClass6<int, MyClass5> myClass6;
Copier après la connexion

在这个示例中,MyClass6类的第二个模板参数已经变成了模板类。这样,我们就可以将一个模板类作为模板参数来使用了。当我们在定义myClass6时,我们可以使用MyClass5作为MyClass6

Le problème est que lorsque nous essayons d'utiliser un type non-modèle comme paramètre de modèle, une erreur se produira, par exemple :

rrreee

Ce code convertira une valeur de type double en 3.14 code> sert de troisième paramètre de modèle de la classe MyClass2. C'est faux car le type double n'est pas un paramètre de modèle et ne peut pas être utilisé dans les paramètres de modèle.

Cependant, nous pouvons parfois essayer d'utiliser une classe non-modèle comme paramètre de modèle. À ce stade, nous pouvons rencontrer l'erreur « Les types non-modèles ne peuvent pas être utilisés dans les paramètres du modèle ». Par exemple :

rrreee

Ce code définit une classe de modèle nommée MyClass4. Le deuxième paramètre de modèle est une instance nommée myClass3, qui est MyClass3code> classe. Lors de la définition de myClass4, nous utilisons MyClass3 comme deuxième paramètre de modèle de MyClass4. Cependant, c'est faux car MyClass3 n'est pas un paramètre de modèle et ne peut pas être utilisé dans les paramètres de modèle. 🎜🎜Solution🎜🎜Il existe un moyen de résoudre cette erreur, qui consiste à remplacer la classe non-modèle par une classe modèle. 🎜rrreee🎜Dans cet exemple, le deuxième paramètre de modèle de la classe MyClass6 est devenu la classe modèle. De cette façon, nous pouvons utiliser une classe de modèle comme paramètre de modèle. Lorsque nous définissons myClass6, nous pouvons utiliser MyClass5 comme deuxième paramètre de modèle de MyClass6. 🎜🎜L'utilisation de cette méthode peut résoudre efficacement l'erreur « Le type non-modèle ne peut pas être utilisé dans les paramètres du modèle ». De cette façon, nous pouvons changer les types non-modèles en types de modèles afin qu'ils puissent être utilisés dans les paramètres du modèle. 🎜🎜Conclusion🎜🎜Dans le processus de programmation de modèles en C++, nous pouvons parfois essayer d'utiliser une classe non-modèle comme paramètre de modèle, mais il existe des limites à cette utilisation. Nous ne pouvons pas utiliser directement une classe non-modèle comme paramètre de modèle car le compilateur ne peut pas déterminer comment gérer ce type non-modèle. Mais en changeant le type non-modèle en type modèle, nous pouvons 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