MFC之標頭檔案相互包含問題及解決方法

2021-05-23 18:03:13 字數 1088 閱讀 5432

問題一:

error c4430: 缺少型別說明符 - 假定為 int。注意: c++ 不支援預設 int

原因分析:

1. (此情況經常出現在大型工程專案中)如果存在兩個類的標頭檔案a.h和b.h,在a.h中有這樣的語句:#include "b.h",在b.h檔案中有這樣的語句:#include "a.h"且在乙個類中有另乙個類的物件時,那麼就會出現這樣的錯誤。

2. 沒有包含要定義的類的標頭檔案。

3.專案中少加了巨集定義,導致標頭檔案重複定義或相應巨集無法識別。

4.當有多個標頭檔案時,順序寫反也可能導致相關的錯誤,其根本是標頭檔案中的預編譯語句被隱去了。

5. 可能是函式沒有寫返回值

解決方法:

我遇到的問題系第一種情況,即標頭檔案的相互包含問題,經過多次嘗試,最後發現在乙個類中使用另外乙個類時,應該在前面應該宣告另外那個需要引用的類,即例如:

class cdiproview;

// cslidethreshod2 對話方塊

class cslidethreshod2 : public cdialog

問題二:

應該不能稱之為問題,就是自定義訊息,感覺還是挺有用的,最近在非模態對話方塊中使用到自定義訊息~~~

自定義訊息步驟:

第一步:使用者自定義訊息巨集

#define wm_my_message (wm_user + n)

第二步:實現訊息處理函式,該函式使用wpram和lparam引數並返回lpesult

lpesult cmainframe::onmymessage(wparam wparam, lparam lparam)

第三步:在類標頭檔案的afx_msg塊中說明訊息處理函式

class cmainframe:public cmdiframewnd

}afx_msg

declare_message_map()}

第四步:在使用者類的訊息塊中,使用on_message巨集指令將訊息對映到訊息處理函式中

begin_message_map(cmainframe, cmdiframewnd)

//}afx_msg_map

end_message_map()

c 標頭檔案相互包含問題

c 中標頭檔案互相包含經常會出現編譯錯誤.示例 如下 h ifndef a h define a h include b.h includeusing namespace std class a endif a h a.cpp include a.h a a a a int a getvala vo...

C標頭檔案相互包含的問題

在c 中,關於cpp的標頭檔案互相包含的問題很讓人頭疼,其實我們誰也不願意弄的結構混亂,難以理解,但有時又是有必須的。假定當前有兩個標頭檔案分別為 a.h 和 b.h,內容分別如下 a.h內容為 ifndef a h define a h endif include b.h class a publ...

標頭檔案的相互包含

標頭檔案的相互包含在編譯時如果順序不注意就很容易造成編譯錯誤。遇到乙個標頭檔案,一開始並沒有包含其他標頭檔案而是定義了一些列舉,然後再包含另外乙個標頭檔案,這樣就很類似於 1 1 2 1 1 在1標頭檔案中包含2標頭檔案,預處理時就是以這樣的形式處理交給編譯器,原本的用意是在1標頭檔案的包含2之前的...