Heim  >  Artikel  >  Backend-Entwicklung  >  Warum löst mein C-Code den Fehler „MyMessageBox nennt keinen Typ“ aus?

Warum löst mein C-Code den Fehler „MyMessageBox nennt keinen Typ“ aus?

Susan Sarandon
Susan SarandonOriginal
2024-11-11 15:27:02760Durchsuche

Why Does My C   Code Throw a

Fehler „MyMessageBox nennt keinen Typ“ in C

Diese Fehlermeldung tritt auf, wenn der Compiler auf ein Klassenmitglied stößt, das einen Typ verwendet das ist noch nicht definiert. Zum Beispiel:

class User
{
public:
  MyMessageBox dataMsgBox;
};

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

In diesem Code enthält die Klasse User ein Mitglied vom Typ MyMessageBox, das noch nicht definiert wurde. Wenn der Compiler die Zeile MyMessageBox dataMsgBox; erreicht, kann er MyMessageBox nicht erkennen, da er keine Informationen über seine Definition hat.

Um diesen Fehler zu beheben, müssen Sie sicherstellen, dass die Klasse, auf die Sie verweisen, vor Ihnen definiert wurde Verwenden Sie es als Mitglied. Dies wird durch Neuordnung der Klassendeklarationen erreicht:

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

class User
{
public:
  MyMessageBox dataMsgBox;
};

Diese Änderung führt jedoch eine zyklische Abhängigkeit ein, da sich MyMessageBox auf Benutzer und Benutzer bezieht bezieht sich auf MyMessageBox. Um diesen Kreislauf zu durchbrechen, können Sie User in der Definition von MyMessageBox weiterleiten:

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

Diese Vorwärtsdeklaration informiert den Compiler darüber, dass eine Klasse mit dem Namen Benutzer ist vorhanden, wodurch MyMessageBox einen Verweis auf Benutzer enthalten kann, auch wenn die vollständige Definition noch nicht verfügbar ist.

Das obige ist der detaillierte Inhalt vonWarum löst mein C-Code den Fehler „MyMessageBox nennt keinen Typ“ aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn