Heim > Artikel > Backend-Entwicklung > Warum erhalte ich in C den Fehler „MyMessageBox benennt keinen Typ'?
Fehler: „MyMessageBox nennt keinen Typ“ in C
Beim Kompilieren von Code, der Klassen mit Vorwärtsdeklaration enthält, ist es wichtig, dies sicherzustellen dass die Reihenfolge der Definition korrekt ist.
Problemdefinition
Beachten Sie die folgenden Klassendeklarationen:
class User { public: MyMessageBox dataMsgBox; }; class MyMessageBox { public: void sendMessage(Message *msg, User *recvr); Message receiveMessage(); vector<Message> *dataMessageList; };
Das Kompilieren dieses Codes mit gcc kann dazu führen zum folgenden Fehler:
MyMessageBox does not name a type
Erklärung
Der Compiler stößt zuerst auf die Benutzerklassendeklaration, findet aber MyMessageBox, auf die als Mitgliedstyp verwiesen wird. Zu diesem Zeitpunkt ist der Compiler jedoch noch nicht auf die Definition von MyMessageBox gestoßen. Dies führt zum Fehler „benennt keinen Typ“.
Lösung
Um dieses Problem zu beheben, muss sichergestellt werden, dass die Definition von MyMessageBox vor seiner Verwendung als erfolgt ein Mitgliedstyp in Benutzer. Dies wird dadurch erreicht, dass User vorwärts deklariert und seine Definition unter MyMessageBox verschoben wird.
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; };
Durch diese Änderung weiß der Compiler, dass User später definiert wird und dass MyMessageBox ein gültiger Typ ist, der als Mitglied verwendet werden kann.
Zusätzlicher Hinweis
Im angegebenen Code akzeptiert die sendMessage-Methode Zeiger auf Message und User. Erwägen Sie stattdessen die Übergabe von Referenzen, um eine Dereferenzierung von Nullzeigern zu verhindern und sicherzustellen, dass Nachrichten und Benutzer immer bereitgestellt werden.
void sendMessage(const Message& msg, User& recvr);
Das obige ist der detaillierte Inhalt vonWarum erhalte ich in C den Fehler „MyMessageBox benennt keinen Typ'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!