typeid mit Qt Objekten wirft eine exception
Verfasst: 6. August 2005 20:06
Hallo,
Ich habe ein Problem mit dem rtti feature unter Windows.
Ich habe Qt mit dem Intel C++ 8.1 kompiliert mit den folgenden Kommandos (Man sieht, daß rtti durch -GR angeschaltet ist!):
icl -c -nologo -Zm200 -W3 -MD -GX -GX -GR -DUNICODE -DQT_DLL
-DQT_THREAD_SUPPORT -DQT_NO_DEBUG -I"C:\Qt\3.3.4\include" -I"."
-I"tmp\moc\release_mt_shared" -I"C:\Qt\3.3.4\mkspecs\win32-icc"
-Fotmp\obj\release_mt_shared\ @C:\DOKUME~1\user\LOKALE~1\Temp\nm84.tmp
main.cpp
link /NOLOGO delayimp.lib /DELAYLOAD:comdlg32.dll
/DELAYLOAD:oleaut32.dll /DELAYLOAD:winmm.dll /DELAYLOAD:wsock32.dll
/DELAYLOAD:winspool.dll /DELAYLOAD:opengl32.dll /SUBSYSTEM:windows
/LIBPATH:"C:\Qt\3.3.4\lib" /OUT:aclock.exe
@C:\DOKUME~1\user\LOKALE~1\Temp\nm85.tmp
Die Bibliothek und das Beispiel aclock funktionieren einwandfrei.
Nun habe ich folgende Zeilen hinzugefügt, die RTTI benutzen:
QRadioButton *button = new QRadioButton(0,"TestButton");
char name[1024];
sprintf( name, "\"%s\" \"%s\" (\"%s\")",
button->name(), button->className(),
typeid( *button ).name() );
clock->setCaption(name);
Der Aufruf typeid(*button) failed mit der folgenden Nachricht:
"Runtime Error!
..
This application has requested the Runtime to terminate it in an unusual
way. Please contact the application's support for more information."
Visual Studio liefert eine non_rtti_object exception. Die Aufrufe typeid(button) und typeid(*clock) dagegen arbeiten korrekt!
Was habe ich falsch gemacht? Kann mir jemand bitte helfen?
Danke im Vorraus,
Gil
Ich habe ein Problem mit dem rtti feature unter Windows.
Ich habe Qt mit dem Intel C++ 8.1 kompiliert mit den folgenden Kommandos (Man sieht, daß rtti durch -GR angeschaltet ist!):
icl -c -nologo -Zm200 -W3 -MD -GX -GX -GR -DUNICODE -DQT_DLL
-DQT_THREAD_SUPPORT -DQT_NO_DEBUG -I"C:\Qt\3.3.4\include" -I"."
-I"tmp\moc\release_mt_shared" -I"C:\Qt\3.3.4\mkspecs\win32-icc"
-Fotmp\obj\release_mt_shared\ @C:\DOKUME~1\user\LOKALE~1\Temp\nm84.tmp
main.cpp
link /NOLOGO delayimp.lib /DELAYLOAD:comdlg32.dll
/DELAYLOAD:oleaut32.dll /DELAYLOAD:winmm.dll /DELAYLOAD:wsock32.dll
/DELAYLOAD:winspool.dll /DELAYLOAD:opengl32.dll /SUBSYSTEM:windows
/LIBPATH:"C:\Qt\3.3.4\lib" /OUT:aclock.exe
@C:\DOKUME~1\user\LOKALE~1\Temp\nm85.tmp
Die Bibliothek und das Beispiel aclock funktionieren einwandfrei.
Nun habe ich folgende Zeilen hinzugefügt, die RTTI benutzen:
QRadioButton *button = new QRadioButton(0,"TestButton");
char name[1024];
sprintf( name, "\"%s\" \"%s\" (\"%s\")",
button->name(), button->className(),
typeid( *button ).name() );
clock->setCaption(name);
Der Aufruf typeid(*button) failed mit der folgenden Nachricht:
"Runtime Error!
..
This application has requested the Runtime to terminate it in an unusual
way. Please contact the application's support for more information."
Visual Studio liefert eine non_rtti_object exception. Die Aufrufe typeid(button) und typeid(*clock) dagegen arbeiten korrekt!
Was habe ich falsch gemacht? Kann mir jemand bitte helfen?
Danke im Vorraus,
Gil