Heim  >  Artikel  >  Backend-Entwicklung  >  Warum erhalte ich in C den Fehler „MyMessageBox benennt keinen Typ'?

Warum erhalte ich in C den Fehler „MyMessageBox benennt keinen Typ'?

DDD
DDDOriginal
2024-11-08 08:58:01897Durchsuche

Why Am I Getting

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!

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