[gelöst] Eigene Klasse verwenden (in QT 4)
-
Ich hoffe, dass ich nicht soooooo falsch liege, aber ich müsste doch normalerweise eine eigene (von QWidget abgeleiteten) Klasse in einer weiteren Klasse als Datentyp verwenden können. Falls nicht bitte aufklären.
Das ist die Fehlermeldung von "make":
mainwindow.h:16: error: ISO C++ forbids declaration of
Eigenerdatentyp' with no type mainwindow.h:16: error: expected;' before '*' tokenHier die Klasse in der mein Typ verwendet wird:
class MainWindow : public QMainWindow { Q_OBJECT; public: //... Eigenerdatentyp *Variable; // };Dazu der Aufruf im Konstruktor:
Variable = new Eigenerdatentyp(this);Die grobe Struktur der eigenen Klasse:
class InternClock : public QWidget { Q_OBJECT; //Methoden usw. };
-
Sollte moeglich sein. Die Fehlermeldung schaut so aus, als ob du ein #include "eigenerdatentyp.h" vergessen oder den namen von Eigenerdatentyp falsch geschrieben haettest (im Beispielcode steht InternClock).
QWidget verbietet uebrigens den Copy-Konstruktor, du musst daher die Widgets immer auf dem Heap erzeugen (was hier auch geschieht, ist also nicht das Problem).
-
Der Datentyp wird in der main.cpp includiert (vielleicht nochmal im MainWindow-header includieren, aber bei zweimal bringt er Warnung)... "InternClock" ist der eigene Datentyp, wollt nur allgemein halten, da ich schon mehrmals das Problem hatte, dann im Nachgang umgehen konnte, mir aber jetzt keine andere Lösung einfällt.
-
es sollte auch reichen, die Klasse über eine Forward-Deklaration bekannt zu machen... spätestens aber in der Klassendefinition muss aber der Header eingebunden werden...
also so in etwa:
// mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H class InternClock; class MainWindow : public QMainWindow { Q_OBJECT; public: //... InternClock* Variable; // ... }; #endif// mainwindow.cpp #include "mainwindow.h" #include "internclock.h" MainWindow::MainWindow( QWidget* parent ) : QMainWindow( parent ) { Variable = new InternClock(this); }usw.
-
In der Klassendefinition war der Header sogar schon drin, hatte ich nur nicht mit gepostet.
Die Forwarddeklaration hats gebracht. Jetzt funktioniert das komplieren ... danke für die Hilfe

-
Akaya schrieb:
(vielleicht nochmal im MainWindow-header includieren, aber bei zweimal bringt er Warnung)
hast du include guards?
-
ÖHm ... nö ... aber jetzt läuft alles erstmal ... sollte das Projekt (irgendwann) einmal größer werden, kann ich mich ja damit auseinander setzen.

-
Muss hinter Q_OBJECT ein ";" ?
Soweit ich mich erinnere ...
-
nein, muss nicht (aber kann)..