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

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

Susan Sarandon
Libérer: 2024-11-11 15:27:02
original
758 Les gens l'ont consulté

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;
};
Copier après la connexion

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;
};
Copier après la connexion

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
Copier après la connexion

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal