Maison > développement back-end > C++ > Comment résoudre l'erreur « MyMessageBox ne nomme pas de type » en C avec déclaration directe ?

Comment résoudre l'erreur « MyMessageBox ne nomme pas de type » en C avec déclaration directe ?

DDD
Libérer: 2024-11-08 11:57:02
original
962 Les gens l'ont consulté

How to Resolve

Erreur "MyMessageBox ne nomme pas de type" en C : la déclaration directe résout la dépendance cyclique

Lorsque vous rencontrez le message "MyMessageBox ne nomme pas de type" type", cela signifie que le compilateur rencontre la classe User avant la définition de MyMessageBox, qui est utilisée comme membre de la classe. Pour résoudre ce problème, nous devons nous assurer que MyMessageBox est défini avant de tenter de l'utiliser dans la classe User.

Cependant, définir MyMessageBox avant User crée une dépendance cyclique car MyMessageBox inclut User en tant que membre de la classe. Pour briser cette dépendance, nous pouvons utiliser la forward déclaration, qui déclare une classe sans la définir.

Cette approche consiste à déclarer l'utilisateur comme suit avant de l'utiliser dans MyMessageBox :

class User; // Forward declaration of User
Copier après la connexion

Avec cette déclaration directe, MyMessageBox peut désormais faire référence à l'utilisateur comme pointeur ou référence, comme on le voit ci-dessous :

class MyMessageBox {
public:
    void sendMessage(Message *msg, User *recvr);
    Message receiveMessage();
    vector<Message>& dataMessageList;
};
Copier après la connexion

La déclaration forward permet à MyMessageBox de reconnaître l'existence de l'utilisateur, même si sa définition n'est pas complète.

Une fois MyMessageBox définie, nous pouvons procéder à la définition de la classe User, qui peut désormais inclure MyMessageBox en tant que membre de classe, comme prévu :

class User {
public:
    MyMessageBox dataMsgBox;
};
Copier après la connexion

En introduisant la déclaration forward, nous dissocions les définitions de classe et résolvez la dépendance cyclique, permettant à la compilation de se poursuivre sans rencontrer l'erreur "MyMessageBox ne nomme pas de type".

Il convient de noter que l'utilisation de pointeurs dans sendMessage n'est pas recommandée, car la transmission de valeurs nulles pour Message ou User peut conduire à un comportement indéfini. Pensez plutôt à utiliser des références pour vous assurer que les deux arguments sont valides avant d'appeler sendMessage.

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