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

Pourquoi est-ce que j'obtiens l'erreur « MyMessageBox ne nomme pas de type » en C ?

DDD
Libérer: 2024-11-08 08:58:01
original
880 Les gens l'ont consulté

Why Am I Getting

Erreur : "MyMessageBox ne nomme pas de type" en C

Lors de la compilation de code incluant des classes utilisant une déclaration directe, il est crucial de s'assurer que l'ordre de définition est correct.

Définition du problème

Considérez les déclarations de classe suivantes :

class User
{
public:
  MyMessageBox dataMsgBox;
};

class MyMessageBox
{
public:
  void sendMessage(Message *msg, User *recvr);
  Message receiveMessage();
  vector<Message> *dataMessageList;
};
Copier après la connexion

La compilation de ce code avec gcc peut conduire à l'erreur suivante :

MyMessageBox does not name a type
Copier après la connexion

Explication

Le compilateur rencontre d'abord la déclaration de classe User, mais il trouve MyMessageBox référencé en tant que type de membre. Cependant, à ce stade, le compilateur n’a pas encore rencontré la définition de MyMessageBox. Cela entraîne l'erreur "ne nomme pas de type".

Solution

Pour résoudre ce problème, il faut s'assurer que la définition de MyMessageBox précède son utilisation comme un type de membre dans Utilisateur. Ceci est réalisé en déclarant l'utilisateur et en déplaçant sa définition sous MyMessageBox.

class User; // Forward declaration of User

class MyMessageBox
{
public:
  void sendMessage(Message *msg, User *recvr);
  Message receiveMessage();
  vector<Message> *dataMessageList;
};

class User
{
public:
  MyMessageBox dataMsgBox;
};
Copier après la connexion

Cette modification permet au compilateur de savoir que l'utilisateur sera défini ultérieurement et que MyMessageBox est un type valide à utiliser en tant que membre.

Remarque supplémentaire

Dans le code donné, la méthode sendMessage prend des pointeurs vers Message et User. Envisagez plutôt de transmettre des références pour empêcher le déréférencement de pointeur nul et garantir que les messages et les utilisateurs sont toujours fournis.

void sendMessage(const Message& msg, User& recvr);
Copier après la connexion

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!

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