Maison >développement back-end >C++ >Pourquoi est-ce que j'obtiens l'erreur « X ne nomme pas de type » en C ?

Pourquoi est-ce que j'obtiens l'erreur « X ne nomme pas de type » en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-08 22:05:02506parcourir

Why Am I Getting the

Erreur "X ne nomme pas de type" en C

En C, lorsque vous rencontrez l'erreur "X ne nomme pas de type" , cela indique que le compilateur ne peut pas reconnaître le type spécifié. Cela se produit souvent avec les dépendances de classe, où une classe fait référence à une autre classe qui n'a pas encore été définie.

Considérez le code suivant :

class User
{
public:
  MyMessageBox dataMsgBox;
};

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

Lors de la compilation de ce code, le compilateur rencontrera l'erreur "MyMessageBox ne nomme pas de type". En effet, lorsque le compilateur traite la classe User, il n'a pas encore rencontré la définition de MyMessageBox.

Pour résoudre ce problème, l'ordre des définitions de classe doit être inversé. Cependant, cela crée une dépendance cyclique, car la définition de MyMessageBox nécessite désormais la définition de User.

Pour briser le cycle, des déclarations forward peuvent être utilisées. Les déclarations directes permettent de déclarer une classe avant qu'elle ne soit définie. Cela permet au compilateur de reconnaître l'existence de la classe sans nécessiter sa définition complète.

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;
};

Dans ce code modifié, la classe User est déclarée en avant, permettant à la définition de MyMessageBox de la référencer. Après la définition de MyMessageBox, la classe User peut être entièrement définie.

De plus, envisagez de modifier la fonction sendMessage dans MyMessageBox pour prendre des références au lieu de pointeurs pour les paramètres Message et User. Cela garantit que les deux arguments sont valides et disponibles lors de l'appel de la fonction.

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!

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