Mehrfachvererbung

Alles rund um die Programmierung mit Qt
Antworten
Dave
Beiträge: 5
Registriert: 23. Oktober 2004 09:34

Mehrfachvererbung

Beitrag von Dave »

Sorry, habe beim erstenmal den Titel vergessen! :oops:

Also, nochmal:

Hi,

bin Anfänger in Sachen Qt-Programmierung
und habe gleich eine Frage:

Wie funktioniert Mehrfachvererbung in Qt?
Speziell:

Möchte nur so zur Übung eine neue Klasse LcdNeu erstellen
die von QLCDNumber und QSpinBox erbt.

Datei lcdneu.h:

#ifndef LCDNEU_H
#define LCDNEU_H

#include <qlcdnumber.h>
#include <qspinbox.h>

class LcdNeu : public QLCDNumber, QSpinBox
{

// Q_OBJECT

public:
LcdNeu(QWidget *parent, const char *name=0); //LcdNeu: ist der Klassenname



};

#endif


Datei lcdneu.cpp:

#include "lcdneu.h"

LcdNeu :: LcdNeu(QWidget *parent, const char *name) //LcdNeu: ist Klassenname
: QLCDNumber(parent, name)

{


}




Datei main.cpp:

#include <qapplication.h>

#include "lcdneu.h"

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
LcdNeu lcdDez(0);
lcdDez.setCaption(QObject::tr("LcdNeu"));
app.setMainWidget(&lcdDez);
lcdDez.show();
return app.exec();
}


Beim compilieren bekomme ich folgende Fehlermeldung:

*cd /Daten/Cpp/Qt3/NeueHeader/lcdneu && QTDIR="/usr/lib/qt3" gmake -k clean && QTDIR="/usr/lib/qt3" gmake -k
*rm -f lcdneu.o main.o
*rm -f *~ core *.core
*g++ -c -pipe -O2 -march=i586 -mcpu=i686 -fmessage-length=0 -Wall -fPIC -Wall -W -O2 -march=i586 -mcpu=i686 -fmessage-length=0 -Wall -fPIC -DQT_NO_DEBUG -DQT_SHARED -DQT_TABLET_SUPPORT -I/usr/lib/qt3/mkspecs/default -I. -I. -I/usr/include -I/usr/lib/qt3/include -o lcdneu.o lcdneu.cpp
*g++ -c -pipe -O2 -march=i586 -mcpu=i686 -fmessage-length=0 -Wall -fPIC -Wall -W -O2 -march=i586 -mcpu=i686 -fmessage-length=0 -Wall -fPIC -DQT_NO_DEBUG -DQT_SHARED -DQT_TABLET_SUPPORT -I/usr/lib/qt3/mkspecs/default -I. -I. -I/usr/include -I/usr/lib/qt3/include -o main.o main.cpp
*main.cpp: In function `int main(int, char**)':
*main.cpp:9: error: request for member `setCaption' is ambiguous
*/usr/lib/qt3/include/qwidget.h:282: error: candidates are: virtual void QWidget::setCaption(const QString&)
*/usr/lib/qt3/include/qwidget.h:282: error: virtual void QWidget::setCaption(const QString&)
*main.cpp:10: error: `QWidget' is an ambiguous base of `LcdNeu'
*main.cpp:11: error: request for member `show' is ambiguous
*/usr/lib/qt3/include/qwidget.h:347: error: candidates are: virtual void QWidget::show()
*/usr/lib/qt3/include/qwidget.h:347: error: virtual void QWidget::show()
*gmake: *** [main.o] Fehler 1
*gmake: Das Target »first« wurde wegen Fehlern nicht aktualisiert.
**** Beendet mit Status: 2 ***


wer kann mir da weiterhelfen??

Für eure Bemühungen vielen Dank im voraus.

Dave
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

Hmm , so wird es nicht gehen. Um das hinzukriegen, müssten die Qt Klassen als virtuelle Basisklassen implementiert werden (siehe Stroustrup...). Da es nicht der Fall ist, gibt es nur die Möglichkiet, die Vererbung durch die Aggregation zu ersetzen:

class LcdNeu : public QWidget
{

LcdNeu(QWidget * p, const char * name, int mode) : QWidget(p,name,mode)
{
m_num = new QLCDNumber(this);
m_spin = new QSpinBox(this);

// hier dann vielleicht irgend eine Layout-Anordnung
QHBoxLayout * pLayout = new QHBoxLayout(this);

pLayout->addWidget(m_num);
pLayout->addWidget(m_spin);

}
protected:

QLCDNumber * m_num;
QSpinBox * m_spin;


};
Antworten