Maison  >  Article  >  développement back-end  >  Erreur de compilation C++ : la définition de type local n'est pas valide, que dois-je faire ?

Erreur de compilation C++ : la définition de type local n'est pas valide, que dois-je faire ?

WBOY
WBOYoriginal
2023-08-21 22:19:481326parcourir

Dans le processus de programmation C++, des erreurs de compilation sont souvent rencontrées, et ces erreurs peuvent être très déroutantes. Cet article abordera principalement l'erreur de compilation C++ : « La définition de type local n'est pas valide, que dois-je faire ? »

Dans les programmes C++, nous avons souvent besoin de définir un type au sein d'une classe, comme une structure. Ceci peut être réalisé en utilisant le mot-clé "typedef". Par exemple :

class MyClass {
public:
    typedef struct {
        int x;
        int y;
    } Point;
    Point getPoint();
};

Dans le programme ci-dessus, nous utilisons "typedef" pour définir une structure "Point" et l'utilisons dans la classe "MyClass".

Cependant, dans certains cas, l'utilisation de "typedef" entraînera une erreur de compilation : "Définition de type local invalide". Cette erreur est généralement due à l'utilisation d'une syntaxe incorrecte lors de la définition du type. Lorsque vous utilisez « typedef » pour définir une structure, vous devez utiliser le mot-clé « struct » pour la distinguer d'une définition de classe. Voici la bonne façon de l'écrire :

class MyClass {
public:
    typedef struct Point {
        int x;
        int y;
    } Point;
    Point getPoint();
};

Dans le programme ci-dessus, le mot-clé "struct" indique au compilateur que nous voulons définir une structure, et le mot-clé "typedef" indique au compilateur que nous voulons nommer cette structure "Indiquer" . De cette façon, nous pouvons utiliser le type "Point" dans la classe. De plus, il faut placer la définition de cette structure avant la définition de la classe pour éviter les erreurs de compilation.

En plus de cela, il existe d'autres causes d'erreur « Définition de type local invalide ». Voici quelques erreurs courantes :

  1. Utiliser des structures ou des syndicats sans nom au sein des classes.
class MyClass {
public:
    struct {
        int x;
        int y;
    } Point; // 编译错误:本地类型定义无效
    Point getPoint();
};

Dans le programme ci-dessus, la structure "Point" n'est pas nommée et ne peut pas être utilisée dans la définition de classe. Il doit être nommé ainsi :

class MyClass {
public:
    struct Point {
        int x;
        int y;
    } Point;
    Point getPoint();
};
  1. Une structure ou une union du même nom est définie au sein de la classe.
class MyClass {
public:
    typedef struct {
        int x;
        int y;
    } Point;
    Point Point; // 编译错误:本地类型定义无效
    Point getPoint();
};

Dans le programme ci-dessus, nous avons défini le même nom pour la structure et les variables, ce qui entraîne une erreur de compilation. Ils doivent être nommés séparément :

class MyClass {
public:
    typedef struct {
        int x;
        int y;
    } Point;
    Point point;
    Point getPoint();
};
  1. Lors de l'utilisation de structures ou d'unions au sein d'une classe, les mots-clés "struct" ou "union" ne sont pas utilisés.
class MyClass {
public:
    typedef Point {
        int x;
        int y;
    } Point;
    Point getPoint(); // 编译错误:本地类型定义无效
};

Dans le programme ci-dessus, nous n'avons pas utilisé le mot-clé "struct" ou "union" pour définir la structure "Point", ce qui provoquerait une erreur de compilation. Le mot clé "typedef" à lui seul ne permet pas au compilateur de savoir qu'il s'agit d'une structure et que la syntaxe correcte doit être utilisée :

class MyClass {
public:
    typedef struct {
        int x;
        int y;
    } Point;
    Point getPoint();
};

En résumé, l'erreur de compilation C++ "Définition de type local invalide" est généralement due à l'utilisation d'une syntaxe incorrecte. , ou dans la classe Causé par la définition interne d'une structure ou d'une union sans nom, etc. En utilisant correctement les mots-clés "typedef" et "struct", nous pouvons éviter ces erreurs.

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