Seite 1 von 1

Statische Methode in einer von QObject abgeleiteten Klasse

Verfasst: 7. Januar 2008 14:26
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

Verfasst: 7. Januar 2008 15:02
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.

Verfasst: 7. Januar 2008 20:26
von M@g!ndo$ch
Danke.