如果在程式中出現了error C3646,那麼這個錯誤可能是由多種問題所導致的,這篇文章將對多種錯誤及對應解決方法進行分析。
在MSDN的官方網站中,Complier Error C3646的定義為unknown override specifier,並且其解釋為The compiler found a token in the position where it expected to find an override specifier, but the token was not recognized by the compiler.
1.迴圈引用
在分離式編譯中,我們往往習慣將不同的類或者函式分別寫在不同的函式中,提高工作效率。但如果在使用時出現兩個類分別在兩個不同的檔案中編寫,並且相互引用,則會出現迴圈引用,引發此錯誤。
舉例:tire.h/tire.cpp和auto.h/auto.cpp 在tire.h中include auto.h,並定義了一個auto的object,然後在auto.h中又include了tire.h
解決方案:在報錯的那個.h檔案的類定義前加上class宣告呼叫的類(即class 類)。
2.語法錯誤
此問題大多因為粗心而導致,比如在某個成員函式中把分號;寫成了中文分號;,將會出現此類錯誤。
解決方案:修改分號
3.類的順序錯誤
如果一個類的成員中包含另一個類,則被包含的類的生命一定要在包含的類之前。
舉例:
1 2 3 4 5 6 7 8 9 |
class Auto { Tire tire; } class Tire { int weight; } // This will cause error C3656 |
解決方法:調整類的位置。
在遇到這種問題的時候,我們需要透過現象看本質。