Alles rund um die Programmierung mit Qt
QtBerserker
Beiträge: 71 Registriert: 15. Mai 2006 09:07
Beitrag
von QtBerserker » 25. November 2006 16:31
Hi,
irgendwie sehe ich wohl den Wald vor Bäumen nicht:
Code: Alles auswählen
#include <QtGui/QApplication>
#include <QtGui/QMainWindow>
#include <QtDebug>
class Application
: public QApplication
{
Q_OBJECT
public:
Application(int argc, char **argv);
virtual ~Application();
};
Application::Application(int argc, char **argv)
: QApplication(argc, argv)
{
qDebug() << "CTor App";
}
Application::~Application()
{
qDebug() << "DTor App";
}
int main(int argc, char **argv)
{
Application app( argc, argv );
QMainWindow win;
win.show();
return app.exec();
}
mit
Code: Alles auswählen
TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .
SOURCES += app.cpp
und der Compiler meint:
Code: Alles auswählen
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. -o app.o app.cpp
g++ -o qtest app.o -L/usr/lib -lQtGui -lQtCore -lpthread
app.o: In function `Application::Application(int, char**)':
app.cpp:(.text+0x30): undefined reference to `vtable for Application'
app.o: In function `Application::Application(int, char**)':
app.cpp:(.text+0x310): undefined reference to `vtable for Application'
app.o: In function `main':
app.cpp:(.text+0x637): undefined reference to `vtable for Application'
app.cpp:(.text+0x65d): undefined reference to `vtable for Application'
collect2: ld gab 1 als Ende-Status zurück
make: *** [qtest] Fehler 1
Wer reisst mir das Brett vor dem Kopf weg?
Vielen Dank
Olaf
Christian81
Beiträge: 7319 Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:
Beitrag
von Christian81 » 25. November 2006 16:47
Q_OBJECT in cpp geht nicht
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
QtBerserker
Beiträge: 71 Registriert: 15. Mai 2006 09:07
Beitrag
von QtBerserker » 25. November 2006 16:56
Christian81 hat geschrieben: Q_OBJECT in cpp geht nicht
Hilf mir mal, ich kann damit nichts anfangen. Es scheint also zumindest am Qt Macro zu hängen.
Olaf
Christian81
Beiträge: 7319 Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:
Beitrag
von Christian81 » 25. November 2006 17:04
Eine Klassendefintion muss in einen Header und nicht in ein Source-File. Erstens weil ein Header dafür da ist und zweitens weil nur dort qmake was mit Q_OBJECT anfangen kann.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
QtBerserker
Beiträge: 71 Registriert: 15. Mai 2006 09:07
Beitrag
von QtBerserker » 25. November 2006 17:35
das zweite war's, Danke!
Hintergrund des Experimentierens war:
Code: Alles auswählen
#ifndef APP_H
#define APP_H
#include <QtGui/QApplication>
#include <QtGui/QMainWindow>
#include <QtDebug>
#include <cstring>
#include <memory>
class Application
: public QApplication
{
Q_OBJECT
public:
Application(int argc, char **argv);
virtual ~Application();
public:
bool operator()() const { return m_runApp; }
private:
void buildApp();
private:
bool m_runApp;
std::auto_ptr<QMainWindow> m_win;
};
#endif // APP_H
und
Code: Alles auswählen
#include <app.h>
Application::Application(int argc, char **argv)
: QApplication(argc, argv),
m_runApp( true )
{
qDebug() << "CTor App";
for ( int i = 0; i != argc; ++i ) {
if (std::strcmp( argv[i], "-help") == 0) {
qDebug() << "Usage: " << argv[0] << " [-help]";
m_runApp = false;
return;
}
}
buildApp();
}
Application::~Application()
{
qDebug() << "DTor App";
}
void Application::buildApp()
{
m_win.reset( new QMainWindow );
m_win->show();
}
int main(int argc, char **argv)
{
try {
Application app( argc, argv );
if ( app() ) return app.exec();
else return 0;
}
catch(const std::exception &e ) {
qDebug() << "Caught Exception " << e.what();
}
catch( ... ) {
qDebug() << "Caught unexpected Exception.";
}
return -1;
}
Hinweise zu diesem Prinzip?
Grüße
Olaf
Christian81
Beiträge: 7319 Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:
Beitrag
von Christian81 » 25. November 2006 17:45
Was gibts da für Probleme ausser dass ich
Code: Alles auswählen
try {
Application app( argc, argv );
if ( app() ) return app.exec();
else return 0;
}
catch(const std::exception &e ) {
qDebug() << "Caught Exception " << e.what();
}
doch etwas übertrieben finde.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung