在用多檔案編譯來寫乙個程式時,遇到了乙個錯誤:
錯誤c3646「name」: 未知重寫說明符
於是我就去某搜尋引擎上搜尋一下前輩們對這個錯誤的心得
綜合網上的經驗我總結了一下出現這個錯誤有可能的幾種情況:
1、標頭檔案之間的迴圈引用
比如:在a.h中包含了b.h並建立了乙個b類物件,然後在b.h中又包含了a.h。
解決方法:檢查工程的標頭檔案包含關係,防止標頭檔案的迴圈引用。
2、分號問題
在標頭檔案的**裡面粗心使用了中文的分號(通常有可能是在報錯**的上一行)
解決方法:檢查報錯標頭檔案中的符號
3、在使用乙個類中包含了另乙個類時兩個類的定義順序不對
示例**:
class a
class b
在這段**中,類a中使用了類b來定義了乙個物件,但是此時類b的定義卻在類a之後,這就可能產生了「未知重寫說明符」的錯誤。
解決方法:檢查類的生命順序,被包含的類的生命順序應該在包含它的類之前。
#include
#include
#include"student.h"
using namespace std;
程式很簡單,只有兩個檔案,main.cpp和student.h,這是main.cpp的巨集定義部分(student.h沒有巨集定義,直接開始定義類)。而這樣編譯之後,在student.h的編譯中就會報錯:錯誤c3646「name」: 未知重寫說明符(下面還有很多,都是這種,就不一一枚舉了)
在經過多次胡亂嘗試之後,我發現如果將#inlcude"student.h"放在using namespace std;下面時,這個程式就可以正常執行了。修改之後的main.cpp巨集定義部分如下:
#include
#include
using namespace std;
#include"student.h"
這樣就沒有「未知重寫說明符」的錯誤了,雖然這次歪打正著,但是也說明自己了對using namespace的理解不夠。
於是再查了一些關於using namespace的東西。
4、關閉後重新開啟vs執行
VS錯誤C3646的可能錯誤
1.迴圈引用 在分離式編譯中,我們往往習慣將不同的類或者函式分別寫在不同的函式中,提高工作效率。但如果在使用時出現兩個類分別在兩個不同的檔案中編寫,並且相互引用,則會出現迴圈引用,引發此錯誤。舉例 tire.h tire.cpp和auto.h auto.cpp 在tire.h中include aut...
C 動態建立控制項時註冊Name屬性
動態建立控制項 1.容器控制項.registername name 要註冊的控制項 註冊控制項 2.容器控制項.findname name as 控制項型別 找到控制項並轉換成相應型別 注意 僅通過 控制項.name來設定是不能通過findname來找到控制項的,必須註冊 動態刪除控制項 1.容器控...
C 常見錯誤
1.用malloc或farmalloc動態分配記憶體時,如 char buffer buffer char malloc 300 因為並不是在所有的情況下,都會分配成功 所以應加 if buffer null 2.char far buffer buffer char far farmalloc s...