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

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

Susan Sarandon
Susan SarandonOriginal
2024-11-08 22:05:02506Durchsuche

Why Am I Getting the

Fehler „X benennt keinen Typ“ in C

In C tritt der Fehler „X benennt keinen Typ“ auf , es zeigt an, dass der Compiler den angegebenen Typ nicht erkennen kann. Dies tritt häufig bei Klassenabhängigkeiten auf, bei denen eine Klasse auf eine andere Klasse verweist, die noch nicht definiert wurde.

Beachten Sie den folgenden Code:

class User
{
public:
  MyMessageBox dataMsgBox;
};

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

Beim Kompilieren dieses Codes wird der Compiler darauf stoßen der Fehler „MyMessageBox nennt keinen Typ“. Dies liegt daran, dass der Compiler bei der Verarbeitung der Klasse User noch nicht auf die Definition von MyMessageBox gestoßen ist.

Um dieses Problem zu beheben, muss die Reihenfolge der Klassendefinitionen umgekehrt werden. Dadurch entsteht jedoch eine zyklische Abhängigkeit, da die Definition von MyMessageBox nun die Definition von User erfordert.

Um den Kreislauf zu durchbrechen, können Forward-Deklarationen verwendet werden. Durch Vorwärtsdeklarationen kann eine Klasse deklariert werden, bevor sie definiert wird. Dadurch kann der Compiler die Existenz der Klasse erkennen, ohne dass ihre vollständige Definition erforderlich ist.

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

In diesem geänderten Code wird die Klasse „User“ vorwärts deklariert, sodass die Definition von MyMessageBox auf sie verweisen kann. Nach der Definition von MyMessageBox kann die Klasse User vollständig definiert werden.

Darüber hinaus sollten Sie erwägen, die sendMessage-Funktion in MyMessageBox so zu ändern, dass sowohl für die Parameter Message als auch User Referenzen anstelle von Zeigern verwendet werden. Dadurch wird sichergestellt, dass beide Argumente beim Aufruf der Funktion gültig und verfügbar sind.

void sendMessage(const Message& msg, User& recvr);

Das obige ist der detaillierte Inhalt vonWarum erhalte ich in C den Fehler „X 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