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!