Maison  >  Article  >  développement back-end  >  Pourquoi est-ce que j'obtiens l'erreur « MyMessageBox ne nomme pas de type » en C ?

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

DDD
DDDoriginal
2024-11-08 08:58:01882parcourir

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

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

MyMessageBox does not name a type

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

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

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