Dies ist eine sehr frustrierende Fehlermeldung in Qt Creator: ’XYZ’ does not name a type
. Dies bedeutet normalerweise, dass ein Fehler in der Klasse XYZ
vorliegt, der verhindert, dass der Compiler den Typ generiert, aber es gibt keine zusätzlichen Hinweise darauf, was schief gelaufen ist.
Irgendwelche Vorschläge?
Ich hatte gerade dieses Problem und habe wie Arckaroph gesagt: Das Problem ist, dass wenn wir eine Headerdatei in eine Quellcodedatei einfügen und wir die Direktive #ifndef verwenden, können wir sie nicht wieder in eine Headerdatei einfügen, um eine Art der enthaltenen Klasse für eine Variable in source anzugeben Codedatei
Beispiel:
class1.h enthält Class1 class2.h enthält Class2 class2 hat eine private Variable V mit class1 type Wenn wir class1.h in class2 einschließen. CPP können wir es nicht in class2.h aufnehmen, um V den Typ class1 zu geben.
Also setzen wir class2.cpp class2.h vor class1.h oder wir löschen class1.h von class2.cpp
Ich glaube, Sie erklären etwas vom Typ XYZ wie
%Vor%Das Problem ist, dass XYZ noch nicht definiert ist.
Das Folgende ist mein Problem und meine Schlussfolgerung. Was denkst du?
Mein Problem ist, dass ich eine Klasse ABC und eine Klasse XYZ habe. Klasse ABC verfügt über ein Mitglied, das als XYZ-Typ deklariert wird. Die Klasse XYZ hat ein Element, das als ABC-Typ deklariert ist. Der Compiler weiß noch nicht, was der XYZ-Typ ist, weil er ihn noch nicht definiert hat. Daher ist der angegebene Fehler 'XYZ' kein Typ.
Beispielcode:
%Vor%In einem kürzlich durchgeführten QT-Projekt, bei dem ich gerade das neueste QT (3/2011) installiert hatte, heilte ich die drei von diesen, die meinen Build stoppten, indem ich das hinzufügte ...
%Vor%... vor dem Einbeziehen der Header-Datei, die die Fehler verursacht hat. Das hat es getan.
Ich weiß nicht, warum sie etwas verbreiten würden, das solche Probleme hat, vielleicht in anderen Systemtypen.h ist in etwas anderem enthalten, aber in meinem Fall sowieso nicht. Hoffe das hilft jemandem.
Zwei Möglichkeiten kommen mir vor:
1. Vielleicht haben Sie SLOT anstelle von SIGNAL in einem connect () - Aufruf.
2. Manchmal hilft es, die .PRO-Datei beliebig zu bearbeiten (z. B. Leerzeichen einfügen und löschen), damit QMake ausgeführt wird und die .moc-Dateien generiert werden.
In meinem Fall habe ich nicht den Namespace verwendet, in dem die Klasse definiert wurde. Der Inhalt des Headers war im Namespace enthalten, aber der Quellendatei fehlte die Direktive using namespace
.
.h
:
.cpp
:
Ich habe eine Lösung für mich gefunden. Sagen wir, ich habe Klasse A und Klasse B. "A.h" enthält "B.h" und hat eine Instanz von B als Mitglied. "B.h" enthält "A.h" und hat Instanz von A als Mitglied. Compiler gibt mir einen Fehler in "B.h" in Codezeile, wo Mitglied der Klasse A deklariert ist:
%Vor%Was ich mache ist in "A.h" Ich entferne #include "B.h" und platziere #include "B.h" in "A.cpp". Und vor der Klassendeklaration schreibe ich Klasse B;
%Vor%Arbeitete für mich, Viel Glück!
Tags und Links c++ qt qt-creator