錯誤C3646「name」 未知重寫說明符 問題

2021-09-12 07:30:47 字數 1059 閱讀 8774

在用多檔案編譯來寫乙個程式時,遇到了乙個錯誤:

錯誤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...