錯誤 未知重寫說明符 問題

2021-10-05 02:48:40 字數 1038 閱讀 3653

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

錯誤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的東西。

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

在用多檔案編譯來寫乙個程式時,遇到了乙個錯誤 錯誤c3646 name 未知重寫說明符 於是我就去某搜尋引擎上搜尋一下前輩們對這個錯誤的心得 綜合網上的經驗我總結了一下出現這個錯誤有可能的幾種情況 1 標頭檔案之間的迴圈引用 比如 在a.h中包含了b.h並建立了乙個b類物件,然後在b.h中又包含了a...

轉換說明符

a a 浮點數 十六進製制數字和p p 記數法 c99 c 字元 d 有符號十進位制整數 f 浮點數 包括float和doulbe e e 浮點數指數輸出 e e 記數法 g g 浮點數不顯無意義的零 0 i 有符號十進位制整數 與 d相同 u 無符號十進位制整數 o 八進位制整數 e.g.0123...

類的訪問說明符和派生訪問說明符

兩個名詞 直接基類 出現在派生列表中 間接基類 由派生類通過其直接基類繼承而來 兩個訪問說明符 類的訪問說明符限制直接基類的類成員訪問形式 派生訪問說明符限制間接基類的類成員訪問形式 類的訪問說明符 public,private,protected private表示私有成員,只有該類的成員函式可以...