[gelöst] linker error: undefined reference
-
RealProgrammer
- Beiträge: 19
- Registriert: 7. August 2006 09:10
[gelöst] linker error: undefined reference
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
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
Zuletzt geändert von RealProgrammer am 8. August 2006 13:35, insgesamt 1-mal geändert.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
-
RealProgrammer
- Beiträge: 19
- Registriert: 7. August 2006 09:10
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
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
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
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?
Code: Alles auswählen
test
/edit
Ist meinTable.cpp dann auch mit in dem Projekt oder eine externe Lib?
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
RealProgrammer
- Beiträge: 19
- Registriert: 7. August 2006 09:10
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Na da haben wir ja das Problem. Du musst Die Klasse natürlich exportieren.
Beim Erstellen der Lib muss dann MAKE_MEINTABLE_LIB definiert sein.
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...
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
RealProgrammer
- Beiträge: 19
- Registriert: 7. August 2006 09:10
hi,
so meine headerdatei sieht jetzt so aus:
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
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
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Jetzt fehlt wohl meintable.moc bzw. dessen include
z.b. hier
http://lists.trolltech.com/qt-interest/ ... 00726.html
z.b. hier
http://lists.trolltech.com/qt-interest/ ... 00726.html
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
RealProgrammer
- Beiträge: 19
- Registriert: 7. August 2006 09:10
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
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
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
-
RealProgrammer
- Beiträge: 19
- Registriert: 7. August 2006 09:10
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
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
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
-
RealProgrammer
- Beiträge: 19
- Registriert: 7. August 2006 09:10