Seite 1 von 1
[gelöst] linker error: undefined reference
Verfasst: 7. August 2006 09:50
von RealProgrammer
Hallo Leute,
ich hab da ein Problem. Ich habe mithilfe des Tutorials Creating Custom Widgets mir selbst eine Klasse geschrieben die von der Klasse QTable erbt.
Diese soll einfach nur Textdrops erlauben, die dann von mir interpretiert werden. Ich habe zusätzlich zur Vererbung noch die Methoden DragEnterEvent und DropEvent implementiert um die funktionalität sicher zustellen. Allerdings bekomme ich immer den error:
.obj/frmstammdaten.o(.text+0x83d5): In function `frmStammdaten::frmStammdaten[in-charge](QWidget*, char const*, unsigned)':
.ui/frmstammdaten.cpp:193: undefined reference to `meinTable::meinTable[in-charge](QWidget*, char const*)'
Kann mir jemand weiterhelfen?
Mit freundlichen Grüßen
Da Real
Verfasst: 7. August 2006 15:48
von Christian81
Q_OBJECT vergessen?
Oder Konstruktor meinTable::meinTable(QWidget*, char const*) nicht implementiert?
Verfasst: 8. August 2006 07:45
von RealProgrammer
Hi,
ne Q-Object hab ich nicht vergessen und der Konstruktor ist auch da. Hier nochmal zur vollständigkeit der Quellcode:
*headerdatei*
#include <qdragobject.h>
#include <qtable.h>
class meinTable : public QTable
{
Q_OBJECT
public:
meinTable(QWidget* parent = 0, const char* name = 0);
~meinTable();
void dragEnterEvent(QDragEnterEvent* event);
void dropEvent(QDropEvent* event);
};
*CPP-Datei*
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <qtable.h>
#include <math.h>
#include <string.h>
#include <stammdatentable.h>
meinTable::meinTable(QWidget* parent, const char* name)
:QTable(parent, name)
{};
meinTable::~meinTable(){};
void meinTable::dragEnterEvent(QDragEnterEvent* event){
event->accept(QTextDrag::canDecode(event));
fprintf(stderr,"es wurde geentert(piraten kommen)\n");
};
void meinTable::dropEvent(QDropEvent* event){
QString text;
if(QTextDrag::decode(event,text)){
fprintf(stderr,"es wurde: %s : gedropt\n",text.data());
}
};
So der Quellcode wird bei mir fehlerfrei compiliert. Wenn ich ihn dann über das Menü Tools->Custom->EditCustomWidgets meine Klasse als Widget anlege und dann die Headerdatei hinterlege, bekomme ich immer den oben genannten Fehler. Beim Compilieren bzw beim linken.
Da Real
Verfasst: 8. August 2006 07:52
von Christian81
Benutze doch bitte das code - Tag
So kann man das sehr schlecht lesen
/edit
Ist meinTable.cpp dann auch mit in dem Projekt oder eine externe Lib?
Verfasst: 8. August 2006 08:10
von RealProgrammer
Hi,
meinTable.cpp ist nicht mit indem Projekt sondern eine externe Lib.
Da Real
Verfasst: 8. August 2006 08:18
von Christian81
Na da haben wir ja das Problem. Du musst Die Klasse natürlich exportieren.
Code: Alles auswählen
#ifdef MAKE_MEINTABLE_LIB
# define MEINTABLE_EXPORT Q_DECL_EXPORT
#else
# ifdef Q_OS_WIN // oder Q_CC_MSVC ? imho kann gcc/win32 das auch
# define MEINTABLE_EXPORT Q_DECL_IMPORT
# else
# define MEINTABLE_EXPORT
# endif
#endif
...
class MEINTABLE_EXPORT meinTable : public...
Beim Erstellen der Lib muss dann MAKE_MEINTABLE_LIB definiert sein.
Verfasst: 8. August 2006 09:12
von RealProgrammer
hi,
so meine headerdatei sieht jetzt so aus:
Code: Alles auswählen
#ifdef MAKE_MEINTABLE_LIB
# define MEINTABLE_EXPORT Q_DECL_EXPORT
#else
# ifdef Q_OS_WIN
# define MEINTABLE_EXPORT Q_DECL_IMPORT
# else
# define MEINTABLE_EXPORT
# endif
#endif
#include <qdragobject.h>
#include <qtable.h>
class MEINTABLE_EXPORT meinTable : public QTable
{
Q_OBJECT
public:
meinTable(QWidget* parent = 0, const char* name = 0);
~meinTable();
void dragEnterEvent(QDragEnterEvent* event);
void dropEvent(QDropEvent* event);
};
Aber jetzt bekomme ich eine andere Fehlermeldung:
/usr2/dss/Gruetter/QT/Stammdaten/NeuerOrdner/libmeinTable.so.1.0.0: undefined reference to `vtable for meinTable'
Aber schonmal sehr vielen Dank für deine Bemühungen!
Da Real
Verfasst: 8. August 2006 09:16
von Christian81
Jetzt fehlt wohl meintable.moc bzw. dessen include
z.b. hier
http://lists.trolltech.com/qt-interest/ ... 00726.html
Verfasst: 8. August 2006 12:24
von RealProgrammer
Hi,
irgendwie komm ich damit immer noch nicht zurecht. Ich habe in einem Thread gelesen, dass man mit moc -o xxx.moc xxx.cpp eine moc Datei erstellen lassen kann, dies klappt bei mir aber nicht da die deklaration der klasse ja in der .h Datei ist. Und die Sache mit dem #include am Ende der .cpp Datei klappt auch nicht da ich ja keine moc Datei habe.
Wäre nett wenn du nochmal drüber schauen könntest.
Da Real
Verfasst: 8. August 2006 12:28
von Christian81
Erstell deine Lib mit qmake, dann musst Du nicht drüber nachdenken.
/edit:
Dann musst Du auch keine moc-Datei inkludieren.
Verfasst: 8. August 2006 12:55
von RealProgrammer
Hi,
wenn ich nur die .h und .cpp Datei habe und dann qmake aufrufe erstellt es mir eine .pro Datei. Wenn ich dann qmake aufrufe bekomme ich zwar das makefile, aber beim Benutzen von make bekomm ich folgenden Fehler:
/usr/lib/gcc-lib/i586-suse-linux/3.3.5/../../../crt1.o(.text+0x18): In function `_start':
../sysdeps/i386/elf/start.S:115: undefined reference to `main'
Kann es sein dass ich einfach nur zu dumm bin?
Da Real
Verfasst: 8. August 2006 13:00
von Christian81
Das pro-File ist falsch. nicht app sondern lib -> siehe qmake doku
Verfasst: 8. August 2006 13:15
von RealProgrammer
Danke, funktioniert ^_^
Da Real