Qt Creator: "XYZ nennt keinen Typ"

8

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?

    
Tony the Pony 14.09.2009, 13:48
quelle

11 Antworten

2

Ich habe dieses Problem bei qtcreator 3.4.1 und QT 5.4 gefunden, wenn ich zB

ersetze %Vor%

mit

%Vor%

dieses Problem ist weg.

    
changfeng 14.06.2015, 10:52
quelle
5

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

    
nabil 16.08.2011 10:25
quelle
3

Stellen Sie in Ihrem abc.cpp sicher, dass Sie xyz.h vor dem Einfügen von abc.h einfügen.

Keine Ahnung, warum der Austausch der beiden einen Unterschied machen würde, wie auch immer, für mich.

    
Steve 09.02.2011 18:17
quelle
2

Erhalten Sie den Fehler vom Compiler oder von der IDE (als eine verschnörkelte Unterstreichung)? Ich habe dies in Qt Creator 1.2.9 gefunden und ich denke, es ist ein Fehler in der IDE.

    
rpg 15.09.2009 14:35
quelle
2

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%     
Arckaroph 06.11.2010 03:44
quelle
1

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.

    
fyngyrz 31.03.2011 05:37
quelle
0

Beinhaltet # die entsprechende Header-Datei?

    
Dirk Eddelbuettel 14.09.2009 13:52
quelle
0

Wenn Sie Vorlagen verwenden, müssen Sie dem Klassennamen den Namen "typename" voranstellen, damit der Compiler den Typ als Typ erkennt ...

%Vor%     
aviraldg 14.09.2009 13:52
quelle
0

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.

    
TonyK 09.02.2011 19:00
quelle
0

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 :

%Vor%

.cpp :

%Vor%     
NuclearPeon 18.07.2016 00:55
quelle
0

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!

    
Vadixem 15.02.2018 16:19
quelle

Tags und Links