multiple metaObjects
Verfasst: 26. November 2006 11:31
Hallo mal wieder.
mein Programm soll Plugins aus dynamischen Bibliotheken laden. Dazu habe ich eine Mutterklasse (cWorkerPlugin) erstellt. EIne Kindklasse (polarizer) soll von dieser Erben.
Die Plugins sollen eigene Parameter auf der Oberfläche des Programms darstellen können, dazu müssen sie natürlich auch slots haben um änderungen an den Parametern zu verarbeiten.
So weit so gut. jetzt will ich einen Plugin compilieren. Problem ist, dass der Compiler meint cWorkerPlugin::metaObject() const und ein paar andre metas wären mehrmals definiert :
die Mutterklasse sieht so aus :
und die Kindklasse so
wo kommen jetzt blos die mehrfachen meta sachen her?
intressant ist auch, wenn ich die polarizer-Klasse direkt in mein projekt mit einkompiliere, also ohne Polymorhie arbeite, dann meint er trotzdem wenn ich einen slot verbinde cWorkerPlugin::slotname(bla) gäbs nicht (gibt es ja auch nicht) ich habe ja aber eine instanz von Polarizer will also Polarizer::slotname(bla) aufrufen.
Hat jemand ideen? Danke!
schönen Sonntag noch, Martin
mein Programm soll Plugins aus dynamischen Bibliotheken laden. Dazu habe ich eine Mutterklasse (cWorkerPlugin) erstellt. EIne Kindklasse (polarizer) soll von dieser Erben.
Die Plugins sollen eigene Parameter auf der Oberfläche des Programms darstellen können, dazu müssen sie natürlich auch slots haben um änderungen an den Parametern zu verarbeiten.
So weit so gut. jetzt will ich einen Plugin compilieren. Problem ist, dass der Compiler meint cWorkerPlugin::metaObject() const und ein paar andre metas wären mehrmals definiert :
Code: Alles auswählen
g++ -shared -Wl,-soname,libworker.so.1 -o libworker.so.1.0.0 polarizer.o cWorkerPlugin.o cDataManager.o moc_cWorkerPlugin.o moc_cDataManager.o moc_cWorkerPlugin.o -L/usr/lib -L/usr/local/qwt/lib -lqwt -lQtGui -L/build/buildd/qt4-x11-4.2.0/lib -L/usr/X11R6/lib -laudio -lXt -lpng -lSM -lICE -lXrender -lXrandr -lXfixes -lXcursor -lXinerama -lfreetype -lXext -lX11 -lQtCore -lfontconfig -lz -lm -lglib-2.0 -ldl -lpthread
moc_cWorkerPlugin.o: In function `cWorkerPlugin::metaObject() const':
moc_cWorkerPlugin.cpp:(.text+0x0): multiple definition of `cWorkerPlugin::metaObject() const'
moc_cWorkerPlugin.o:moc_cWorkerPlugin.cpp:(.text+0x0): first defined here
moc_cWorkerPlugin.o:(.data.rel.ro+0x0): multiple definition of `cWorkerPlugin::staticMetaObject'
moc_cWorkerPlugin.o:(.data.rel.ro+0x0): first defined here
moc_cWorkerPlugin.o: In function `cWorkerPlugin::qt_metacall(QMetaObject::Call, int, void**)':
moc_cWorkerPlugin.cpp:(.text+0x20): multiple definition of `cWorkerPlugin::qt_metacall(QMetaObject::Call, int, void**)'
moc_cWorkerPlugin.o:moc_cWorkerPlugin.cpp:(.text+0x20): first defined here
moc_cWorkerPlugin.o: In function `cWorkerPlugin::qt_metacast(char const*)':
moc_cWorkerPlugin.cpp:(.text+0x90): multiple definition of `cWorkerPlugin::qt_metacast(char const*)'
moc_cWorkerPlugin.o:moc_cWorkerPlugin.cpp:(.text+0x90): first defined here
collect2: ld returned 1 exit status
make: *** [libworker.so.1.0.0] Fehler 1
martin@martin:~/polarizersvn/polarizer/src$Code: Alles auswählen
class cWorkerPlugin : public QObject
{
Q_OBJECT;
public :
virtual ~cWorkerPlugin();
QString name;
ePluginType type;
virtual void setupParams();
virtual void work();
public slots :
virtual void sparam();
};Code: Alles auswählen
class Polarizer : public cWorkerPlugin
{
public:
//Zeiger auf den DataManager
mainWindow *parent;
cDataSeries ssigma, cu;
Ui_Form *parameters;
std::vector<double> pdcurve;
Polarizer(mainWindow *owner);
~Polarizer(void);
void setupParams();
void work();
//ein paar interne prozeduren, nur zum rechnen da
public slots:
//andere Slots die ich später nicht mehr brauche
void sparam();
};intressant ist auch, wenn ich die polarizer-Klasse direkt in mein projekt mit einkompiliere, also ohne Polymorhie arbeite, dann meint er trotzdem wenn ich einen slot verbinde cWorkerPlugin::slotname(bla) gäbs nicht (gibt es ja auch nicht) ich habe ja aber eine instanz von Polarizer will also Polarizer::slotname(bla) aufrufen.
Hat jemand ideen? Danke!
schönen Sonntag noch, Martin