Seite 1 von 1

Probleme mit Mehrfachvererbung

Verfasst: 16. September 2006 08:43
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

Verfasst: 18. September 2006 12:13
von tachyon
Naja, rautenförmige Strukturen bei Mehrfachvererbung sind eine Sache, die man tunlichst vermeiden sollte.
Was genau ist denn myObject?

Verfasst: 18. September 2006 19:36
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

Verfasst: 18. September 2006 19:45
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>

Re: Probleme mit Mehrfachvererbung

Verfasst: 19. September 2006 13:12
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