使用控制項時提示 未宣告識別符號 的解決方法

2021-06-14 07:03:27 字數 1544 閱讀 1145

問題提出:mfc擴充套件dll程式中,新建了乙個對話方塊idd_dialog 1及三個文字編輯控制項idc_sigm,、idc_ratiolow和idc_ratiohigh。並新建了乙個對話方塊類(派生於cdialog類)。有關控制項引用的**如下:

enum ;

ddx_text(pdx,idc_sigma,m_sigma);

ddx_text(pdx,idc_ratiolow ,m_ratiolow);

ddx_text(pdx,idc_ratiohigh ,m_ratiohigh);

編譯時提示如下錯誤:

error c2065: 「idc_ratiohigh」: 未宣告的識別符號(其他控制項是相同錯誤,在此省略)。

解決方法

對於這種錯誤這裡有就是控制項未定義的意思,為什麼會出現這種錯誤呢?因為這些控制項id都是函式的引數,一般情況我們會看下函式定義。我們在msdn中看下ddx_text這個函式的定義:

void afxapi ddx_text( cdataexchange*pdx, intnidc, byte&value);

最後乙個引數"value"還可以是其他資料型別(比如int、long。。。)。

再在resource.h中看下有沒有這些空間的定義,發現是有的,**如下:

#define idd_dialog1                     5000

#define idc_sigma                       5000

#define idc_ratiolow                    5001

#define idc_ratiohigh                   5002

既然有定義還出錯,我先想到把定義的具體值帶進去試試,於是將  enum 改為  enum ,其他出錯語句進行類似更改。結果編譯鏈結時通過,沒提示錯誤。我以為問題就此解決了呢,實際上更要命的在後面。

這樣修改編譯鏈結當然沒有問題,因為是按定義來的,至於變數m_sigma等能不能傳不到相應的文字控制項中,我就不清楚了,有時間可以做個測試。所以也就通過了。但是在用"類嚮導"給對話方塊中"確定"按鈕新增事件響應訊息時,卻提示異常,原來問題還沒實質性解決。

再想想,既然定義在"resource.h"裡,會不會沒有包含這個標頭檔案,因為對話方塊使我們新建的,"resource.h"時隨對話方塊自動新增的,當然不會自動包含進某個.cpp或.h檔案內,用到"resource.h"裡定義的是新建的對話方塊類,是沒有包含"resource.h"的。看似問題解決了。將resource.h新增到stdafx.h或對話方塊類的標頭檔案中就ok了。

#include "resource.h"

果然編譯鏈結通過,給控制項新增事件響應不會出現什麼異常了。

總結:這本是很常見的問題,以前我也遇到過,在此寫下來提醒自己注意,特別注意的是在

遇到類似沒有定義的問題時首先考慮定義是否在其他標頭檔案內而又沒包含其該檔案。

關於錯誤「未宣告的識別符號」

在vs2012下進行vc 除錯時,出現這樣一種錯誤 error c2065 未宣告的識別符號,當時感覺十分怪異,為什麼說怪異呢?因為如果在.cpp中未引入相關.h檔案出現這樣的錯誤很正常,但是現在是已經引入了相關的標頭檔案,卻還是出現了諸如error c2065 error c2087 error ...

error C2065 未宣告的識別符號錯誤

error c2065 未宣告的識別符號錯誤 在vs2010下進行vc 除錯時,出現這樣一種錯誤 error c2065 未宣告的識別符號,當時感覺十分怪異,為什麼說怪異呢?因為如果在.cpp中未引入相關.件出現這樣的錯誤很正常,但是現在是已經引入了相關的標頭檔案,卻還是出現了諸如error c20...

已經包含標頭檔案仍然 出現,錯誤「未宣告的識別符號」

由於當前在往乙個比較大的專案中新增檔案,檔案又有相似性所以採取了複製的方式,最後出現了乙個大疏漏。在總的.cpp檔案中呼叫新檔案中的函式,在包含了新檔案的.h標頭檔案的情況下仍然說沒有找到識別符號,在網上找了很多方法,其中比較玄學的一種是 在vs2012 下進行vc 除錯時,出現這樣一種錯誤 err...