在底部回答。謝謝!爲什麼RUMTIME_CLASS在VS2008 Debug版本中沒有「DECLARE_DYNAMIC」通過編譯?
編譯器在發佈版本中正確地捕獲了錯誤C2039和C2065;
我只是好奇,爲什麼相同的代碼可以在調試版本中通過編譯?
這是一個已知的Microsoft錯誤嗎?
我知道DECLARE_DYNAMIC/IMPLEMENT_DYNAMIC將解決這個問題。但是,如果沒有它們,爲什麼微軟在我的調試版本中通過編譯?這是個問題。
已知原因。邁克爾的回答完全正確。 _AFXDLL僅在我的調試配置中定義。因此,在展開宏RUNTIME_CLASS時,Debug版本使用CObject :: GetThisClass。
所以,下面的代碼會被抓住編譯器錯誤的發佈和調試版本,如果DECLARE_DYNAMIC/IMPLEMENT_DYNAMIC沒有宣稱:如果_AFXDLL沒有預先定義
CRuntimeClass* p = (CRuntimeClass*) (&XXX::classXXX);
但下面的代碼只會失敗。
p->IsKindOf(RUNTIME_CLASS(XXX))
感謝
你可以發佈源代碼並顯示錯誤消息的文本嗎? –
錯誤C2039:'classXXXX':不是'XXXX'的成員,錯誤C2065:'classXXXX':未聲明的標識符 – milesma
僅僅是我還是被充斥着沒有任何合理水平的努力的問題放入他們甚至讓他們負責? –