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!