Seite 1 von 1

[gelöst] Field has incomplete type' durch QPointer

Verfasst: 22. April 2015 08:57
von huckleberry
Hi Leute,

ich habe eine Bibliothek bekommen, indem folgendes etwa als private deklariert ist:

Code: Alles auswählen

private:
 QPointer<SpecialObject> _specObj;
Wenn ich damit mein Projekt kompiliere bekomme ich:
C:\MyProjects\libs\SpecialObject.h:65: Fehler: field '_specObj has incomplete type
QPointer<SpecialObject> _specObj;
Woanders benutze ich SpecialObject als Zeiger problemlos.
Da es hier kein Zeiger ist, würde es gerne den Speicherplatz reservieren, den es für SpecialObject benötigen würde. diese kennt er aber anscheiend noch nicht..

Bin ratlos und dankbar für hinweise.

VG Huck

Re: 'Field has incomplete type' durch QPointer

Verfasst: 22. April 2015 09:48
von huckleberry
Übrigens: Suchemaschinen nennen nur Forwärtsdeklarationen und structs als Ursachen. Ich benutze nichts davon?!!?

Re: 'Field has incomplete type' durch QPointer

Verfasst: 22. April 2015 14:02
von RHBaum
Übrigens: Suchemaschinen nennen nur Forwärtsdeklarationen und structs als Ursachen. Ich benutze nichts davon?!!?
Forward declarations sind nicht optional, sie sind ein muss, wenn mans braucht. sonst compilierts halt nicht :-)
structs und classes sind ähnlich für c++ ^^ der compiler macht da "nicht viel" unterschiede.

Ich vermute:

du deklarierst dein QPointer<SpecialObject>
und an der stelle ist SpecialObject nicht bekannt ist.
Da QPointer nur QObjects, also Klassen die von QObject abgeleitet sind, guarded, wird da auch eine Abhaengigkeit zu bestehen, und der QPointer wird versuchen dein SpecialObject * in ein QObject * zu casten mit einem Standard upcast.
D.h. er muss wissen das SpecialObject von QObject abgeleitet ist ... ergo: nen forwarder wird da nicht langen ...
also muss deine SpecialObject Klasse verfügbar sein ....
Also #include <SpecialObject.h> für die Spezialisierung des Templates ( QPointer<SpecialObject> _specObj; ) notwendig !
(Im gegensatz zu QSharedPointer & co, da langt nen Forward)

Ciao ...

Re: 'Field has incomplete type' durch QPointer

Verfasst: 22. April 2015 14:06
von huckleberry
RHBaum hat geschrieben:Also #include <SpecialObject.h>
Jain, der Kollege hatte

Code: Alles auswählen

#include <QPointer>
vergessen.. und ich ab mich dumm und dämlich gesucht ;)

Danke!