Maison >développement back-end >C++ >Pourquoi mon code C génère-t-il une erreur « MyMessageBox ne nomme pas de type » ?

Pourquoi mon code C génère-t-il une erreur « MyMessageBox ne nomme pas de type » ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-11 15:27:02803parcourir

Why Does My C   Code Throw a

Erreur "MyMessageBox ne nomme pas de type" en C

Ce message d'erreur se produit lorsque le compilateur rencontre un membre de la classe qui utilise un type qui n'a pas encore été défini. Par exemple :

class User
{
public:
  MyMessageBox dataMsgBox;
};

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

Dans ce code, la classe User contient un membre de type MyMessageBox, qui n'a pas encore été défini. Lorsque le compilateur atteint la ligne MyMessageBox dataMsgBox;, il ne peut pas reconnaître MyMessageBox car il n'a aucune information sur sa définition.

Pour résoudre cette erreur, vous devez vous assurer que la classe à laquelle vous faites référence a été définie avant de utilisez-le en tant que membre. Ceci est réalisé en réorganisant les déclarations de classe :

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

class User
{
public:
  MyMessageBox dataMsgBox;
};

Cependant, cette modification introduit une dépendance cyclique, car MyMessageBox fait référence à User, et User fait référence à MyMessageBox. Pour briser ce cycle, vous pouvez déclarer User dans la définition de MyMessageBox :

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

class User; // forward declaration of User

User dataMsgBox; // now this line is valid

Cette déclaration forward informe le compilateur qu'une classe nommée L'utilisateur existe, ce qui permet à MyMessageBox de contenir une référence à Utilisateur même si sa définition complète n'est pas encore disponible.

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