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!