Probleme mit Mehrfachvererbung

Alles rund um die Programmierung mit Qt
Antworten
andiK
Beiträge: 27
Registriert: 23. September 2005 20:29
Wohnort: Bruchsal

Probleme mit Mehrfachvererbung

Beitrag von andiK »

Hallo zusammen,
ich hänge gerade an folgendem Problem:

Ich möchte eine Klasse myButton erstellen, die folgendermassen abgeleitet wird:

Code: Alles auswählen

                        myObject   
               /                              \
QObject                                    --> myButton
               \                              /
                    QPushButton   
Das war bis dahin kein Problem. Jetzt möchte ich allerdings, dass myButton ein selbst definiertes Signal emittiert, z.B. valueChanged(bool)

Nun meldet mir der Compiler allerdings folgender Fehler aus seiner moc_ Datei:

compilations/moc_guiobjects.cpp: In member function »void myButton::valueChanged(bool)«:
compilations/moc_guiobjects.cpp:152: Fehler: »QObject« ist mehrdeutige Basis von »myButton«
make: *** [compilations/moc_guiobjects.o] Fehler 1
Kann mir jemand sagen, wie ich diesen Fehler aus der Welt schaffen kann?

Viele Grüsse,

andikt
tachyon
Beiträge: 29
Registriert: 22. Juli 2006 10:03

Beitrag von tachyon »

Naja, rautenförmige Strukturen bei Mehrfachvererbung sind eine Sache, die man tunlichst vermeiden sollte.
Was genau ist denn myObject?
andiK
Beiträge: 27
Registriert: 23. September 2005 20:29
Wohnort: Bruchsal

Beitrag von andiK »

Hallo Tachyon,

die Klasse myObject habe ich wie beschrieben von QObject abgeleitet. Sie ist eine Basisklasse für verschiedene funktionelle Einheiten, die über Signal-Slot Connections miteinander Daten austauschen. In der Basisklasse myObject sind halt einige Methoden und Variablen, die alle diese Objekte benötigen implementiert.

Nun möchte ich halt auch so eine funktionelle Einheit haben, die auf einem Dialogfenster als QPushButton dienen kann. Im Hauptprogramm pflege ich einige Listen vom Typ QList<myObject> . Daher wollte ich beide Klassen myDialog und QPushButton als Basis nehmen.

Eine Alternative ist natürlich eine Klasse myButton von myObject abzuleiten, einen separaten QPushButton zu erzeugen und den Zeiger des Buttons dann an myButton zu übergeben. Aber ich wollte mal schauen ob ich es auch mit Mehrfachvererbung hinkriege.


Gruesse,

andi
tachyon
Beiträge: 29
Registriert: 22. Juli 2006 10:03

Beitrag von tachyon »

Also möglich ist das natürlich auch. Allerdings musst Du dann die Elemente auf die du zugreifen willst quallifizieren:

<Objekt>.<Basisklasse>::<FeldOderMethode>
Goos
Beiträge: 360
Registriert: 17. August 2004 10:10
Wohnort: Black Forest

Re: Probleme mit Mehrfachvererbung

Beitrag von Goos »

andiK hat geschrieben: Kann mir jemand sagen, wie ich diesen Fehler aus der Welt schaffen kann?
Nuja, man kann drueber diskutieren, ob man sowas nicht besser vermeiden sollte.
Wenn das alles selbst gemacht waere, dann wuerde ich sagen, dass myObject und QPushButton nur virtuell von QObject erben sollten.
Nun ist aber QPushButton abgeleitet von QButton und das wiederum abgeleitet von QWidget. Dieses QWidget ist aber "leider" nicht virtuell abgeleitet vom QObject, deshalb verbietet sich der Ansatz so wie du ihn ausprobieren wolltest.

Goos
Antworten