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

Verschiedenes zu Qt
Antworten
huckleberry
Beiträge: 115
Registriert: 2. Oktober 2010 17:07

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

Beitrag 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
Zuletzt geändert von huckleberry am 22. April 2015 14:08, insgesamt 1-mal geändert.
huckleberry
Beiträge: 115
Registriert: 2. Oktober 2010 17:07

Re: 'Field has incomplete type' durch QPointer

Beitrag von huckleberry »

Übrigens: Suchemaschinen nennen nur Forwärtsdeklarationen und structs als Ursachen. Ich benutze nichts davon?!!?
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: 'Field has incomplete type' durch QPointer

Beitrag 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 ...
huckleberry
Beiträge: 115
Registriert: 2. Oktober 2010 17:07

Re: 'Field has incomplete type' durch QPointer

Beitrag 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!
Antworten