Maison développement back-end C++ Erreur de compilation C++ : les types locaux ne sont pas autorisés comme paramètres de modèle, comment y remédier ?

Erreur de compilation C++ : les types locaux ne sont pas autorisés comme paramètres de modèle, comment y remédier ?

Aug 21, 2023 pm 09:39 PM
erreur de compilation c++ paramètres du modèle type local

Lors de l'écriture de code C++, vous rencontrerez parfois des erreurs de compilation telles que « les types locaux ne sont pas autorisés comme paramètres de modèle ». Cela signifie généralement que nous utilisons un type local dans un paramètre de modèle, tel qu'une classe ou un type de structure défini dans une fonction. Dans cet article, nous aborderons ce problème et comment le résoudre.

Tout d’abord, voyons pourquoi cette erreur de compilation se produit. En C++, les paramètres de modèle doivent être résolus au moment de la compilation, tandis que la définition du type local a lieu au moment de l'exécution. Par conséquent, les types locaux ne peuvent pas être utilisés comme paramètres de modèle car le compilateur ne sait pas comment les analyser.

Donnez un exemple pour illustrer ce problème :

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

#include <iostream>

 

template <typename T>

void printSize(const T& arg){

   struct localStruct {

      int i;

   }myLocalStruct;   //定义了一个局部结构体类型

 

   std::cout << "Size of arg = "<<sizeof(arg)<<"

";

   std::cout << "Size of localStruct = "<<sizeof(myLocalStruct)<<"

";

}

 

int main() {

   int x = 5;

   printSize(x);

   return 0;

}

Copier après la connexion

Dans le code ci-dessus, nous définissons une fonction modèle printSize, qui reçoit un paramètre arg. Nous définissons également un type de structure locale myLocalStruct et utilisons sizeof pour en obtenir la taille et le paramètre arg.

Lorsque nous compilons ce code, nous obtenons un message d'erreur : "Les types locaux ne sont pas autorisés comme paramètres de modèle".

Pour résoudre ce problème, nous devons convertir le type local en type global. Nous pouvons déplacer la définition de type local en dehors de la fonction ou la définir comme type membre de la classe.

Voyons comment nous pouvons corriger le code ci-dessus en utilisant des types globaux :

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

#include <iostream>

 

struct localStruct {

   int i;

};   //将局部结构体类型定义为全局

 

template <typename T>

void printSize(const T& arg){

   localStruct myLocalStruct;

 

   std::cout << "Size of arg = "<<sizeof(arg)<<"

";

   std::cout << "Size of localStruct = "<<sizeof(myLocalStruct)<<"

";

}

 

int main() {

   int x = 5;

   printSize(x);

   return 0;

}

Copier après la connexion

Maintenant, nous avons déplacé la définition de la structure locale en dehors de la fonction. Le correctif est compilé et exécuté avec succès, et le résultat est correct.

En plus de convertir les types locaux en types globaux, une autre solution consiste à définir le type local comme type membre de la classe. Cette approche nécessite du code supplémentaire, mais est parfois plus pratique :

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

#include <iostream>

 

template <typename T>

class myClass{

public:

   struct localStruct {

      int i;

   };

 

   void printSize(const T& arg){

      localStruct myLocalStruct;

 

      std::cout << "Size of arg = "<<sizeof(arg)<<"

";

      std::cout << "Size of localStruct = "<<sizeof(myLocalStruct)<<"

";

   }

};

 

int main() {

   int x = 5;

   myClass<int> obj;

   obj.printSize(x);

   return 0;

}

Copier après la connexion

Dans le code ci-dessus, nous définissons le type de structure locale comme type de membre de myClass. Ce correctif se compile et s'exécute également avec succès et génère les résultats corrects.

Pour résumer, lorsque nous rencontrons une erreur de compilation de « les types locaux ne sont pas autorisés comme paramètres de modèle » lors de l'utilisation de modèles C++, nous devons convertir le type local en un type global ou un type membre de la classe. Ces correctifs peuvent résoudre ce problème avec succès.

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 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

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment résoudre l'erreur de compilation C++ : « aucune fonction correspondante pour l'appel à « fonction » ? Comment résoudre l'erreur de compilation C++ : « aucune fonction correspondante pour l'appel à « fonction » ? Aug 25, 2023 pm 04:31 PM

Comment résoudre l'erreur de compilation C++ : « aucune fonction correspondante pour l'appel à « fonction » ?

Résoudre l'erreur de compilation C++ : « types incompatibles », comment la résoudre ? Résoudre l'erreur de compilation C++ : « types incompatibles », comment la résoudre ? Aug 25, 2023 pm 05:13 PM

Résoudre l'erreur de compilation C++ : « types incompatibles », comment la résoudre ?

Erreur de compilation C++ : Définition en double des paramètres de fonction, comment la résoudre ? Erreur de compilation C++ : Définition en double des paramètres de fonction, comment la résoudre ? Aug 22, 2023 pm 12:33 PM

Erreur de compilation C++ : Définition en double des paramètres de fonction, comment la résoudre ?

Comment résoudre l'erreur de compilation C++ : « aucune correspondance pour l'appel à la « fonction » ? Comment résoudre l'erreur de compilation C++ : « aucune correspondance pour l'appel à la « fonction » ? Aug 25, 2023 pm 09:01 PM

Comment résoudre l'erreur de compilation C++ : « aucune correspondance pour l'appel à la « fonction » ?

Comment résoudre l'erreur de compilation C++ : « redéfinition de la « fonction » ? Comment résoudre l'erreur de compilation C++ : « redéfinition de la « fonction » ? Aug 27, 2023 pm 02:27 PM

Comment résoudre l'erreur de compilation C++ : « redéfinition de la « fonction » ?

Comment résoudre l'erreur de compilation C++ : « surcharge ambiguë pour « fonction » ? Comment résoudre l'erreur de compilation C++ : « surcharge ambiguë pour « fonction » ? Aug 26, 2023 pm 12:30 PM

Comment résoudre l'erreur de compilation C++ : « surcharge ambiguë pour « fonction » ?

Erreur de compilation C++ : Variable non définie utilisée, comment la résoudre ? Erreur de compilation C++ : Variable non définie utilisée, comment la résoudre ? Aug 22, 2023 pm 03:01 PM

Erreur de compilation C++ : Variable non définie utilisée, comment la résoudre ?

Erreur de compilation C++ : plusieurs définitions, comment les modifier ? Erreur de compilation C++ : plusieurs définitions, comment les modifier ? Aug 21, 2023 pm 11:07 PM

Erreur de compilation C++ : plusieurs définitions, comment les modifier ?

See all articles