[gelöst] linker error: undefined reference

Alles rund um die Programmierung mit Qt
Antworten
RealProgrammer
Beiträge: 19
Registriert: 7. August 2006 09:10

[gelöst] linker error: undefined reference

Beitrag 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
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:

Beitrag von Christian81 »

Q_OBJECT vergessen?
Oder Konstruktor meinTable::meinTable(QWidget*, char const*) nicht implementiert?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
RealProgrammer
Beiträge: 19
Registriert: 7. August 2006 09:10

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Benutze doch bitte das code - Tag

Code: Alles auswählen

test
So kann man das sehr schlecht lesen

/edit
Ist meinTable.cpp dann auch mit in dem Projekt oder eine externe Lib?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
RealProgrammer
Beiträge: 19
Registriert: 7. August 2006 09:10

Beitrag von RealProgrammer »

Hi,

meinTable.cpp ist nicht mit indem Projekt sondern eine externe Lib.

Da Real
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
RealProgrammer
Beiträge: 19
Registriert: 7. August 2006 09:10

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Jetzt fehlt wohl meintable.moc bzw. dessen include

z.b. hier
http://lists.trolltech.com/qt-interest/ ... 00726.html
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
RealProgrammer
Beiträge: 19
Registriert: 7. August 2006 09:10

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Erstell deine Lib mit qmake, dann musst Du nicht drüber nachdenken.

/edit:
Dann musst Du auch keine moc-Datei inkludieren.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
RealProgrammer
Beiträge: 19
Registriert: 7. August 2006 09:10

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Das pro-File ist falsch. nicht app sondern lib -> siehe qmake doku
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
RealProgrammer
Beiträge: 19
Registriert: 7. August 2006 09:10

Beitrag von RealProgrammer »

Danke, funktioniert ^_^

Da Real
Antworten