Statische Methode in einer von QObject abgeleiteten Klasse

Alles rund um die Programmierung mit Qt
Antworten
M@g!ndo$ch
Beiträge: 70
Registriert: 7. Januar 2007 14:56

Statische Methode in einer von QObject abgeleiteten Klasse

Beitrag von M@g!ndo$ch »

Hi,

kann es sein, dass man in einer von QObject abgeleiten Klasse keine Methoden implmentieren kann, die auf statische Attributen der Klasse zugreift bzw. diese zurückliefert?

Hier mein Beispielcode. In der Methode "QString getString()" tritt das Problem auf:
MyThread.h

Code: Alles auswählen

#ifndef MY_THREAD
#define MY_THREAD

#include <QtCore>
#include <QtGui>

class MyThread : public QThread
{
	Q_OBJECT
	public:
		MyThread(){};
	public:
		virtual ~MyThread(void){};	
		void run();	
		static QString getString();

	public slots:
		void slot1(QString oString);
		void emitSignal();
		
	protected:
		static QString m_oString;
		
	signals:
		void signal1(QString);
};
#endif
MyThread.cpp:

Code: Alles auswählen

#include "MyThread.h"

void MyThread::slot1(QString oString)
{
	QThread *currentThread = QThread::currentThread();		
	qDebug() << "Slot executed by" << currentThread->objectName().toAscii().data();
}

void MyThread::run()
{	
	exec();
}

void MyThread::emitSignal()
{	
	emit signal1("Signal");
	QThread *currentThread = QThread::currentThread();		
	qDebug() << "Signal emitted by" << currentThread->objectName().toAscii().data();
}

QString MyThread::getString()
{
	return QString(m_oString);	
}
Bekomme beim kompilieren folgende Fehler:

g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl -Wl,-subsystem,windows -o "debug\Sandbox.exe" debug\main.o debug\MyThread.o debug\SandboxImpl.o debug\moc_MyThread.o debug\moc_SandboxImpl.o -L"p:\Programming\SDK\Qt\4.3.0_ecl_static\lib" -lmingw32 -lqtmaind -lQtGuid -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lmsimg32 -lQtCored -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 -lws2_32
debug\MyThread.o(.text+0x5e2): In function `ZN8MyThread9getStringEv':
D:/Programming/Projects/eclipse/Sandbox/SourceFiles/MyThread.cpp:23: undefined reference to `MyThread::m_oString'
collect2: ld returned 1 exit status
mingw32-make.exe[1]: *** [debug\Sandbox.exe] Error 1
mingw32-make.exe[1]: Leaving directory `D:/Programming/Projects/eclipse/Sandbox'
P:\Programming\Tools\MinGW\bin\mingw32-make.exe: *** [debug] Error 2

Mache ich was falsch oder geht das aus irgendeinem Grund nicht?

Gruß M@g
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Du machst was falsch - C++ Grundwissen

Code: Alles auswählen

QString MyThread::m_oString;
fehlt in der cpp-Datei - statische Member müssen initialisiert werden.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
M@g!ndo$ch
Beiträge: 70
Registriert: 7. Januar 2007 14:56

Beitrag von M@g!ndo$ch »

Danke.
Antworten