الحصول على خطأ "معرف غير معرف"
-
26-09-2019 - |
سؤال
بعد البرنامج التعليمي في http://www.codersource.net/mfc/mfc-tutorials/ctabctrl.aspx ، لقد أعلنت الوظيفة ActivateTabDialogs()
في ملف Header الخاص بي واستدعاه داخل وظيفة أخرى في صفي. المترجم يعطي خطأ C2065: 'ActivateTabDialogs' : undeclared identifier
, ، على الخط ActivateTabDialogs();
داخل تعريف الوظيفة OnSelChange()
. ما الذي انتهاكه هنا؟
هذا هو الجزء الخاص بي في ملف الرأس TCGeriArama_TabCtrl.h
class CTCGeriArama_TabCtrl : public CTabCtrl
{
// Construction
public:
CTCGeriArama_TabCtrl();
// Attributes
//Array to hold the list of dialog boxes/tab pages for CTabCtrl
int m_DialogID[2];
int m_nPageCount;
//CDialog Array Variable to hold the dialogs
CDialog *m_Dialog[2];
public:
// Operations
//Function to Create the dialog boxes during startup
void InitDialogs();
//Function to activate the tab dialog boxes
void ActivateTabDialogs();
هذا هو تعريف ActivateTabDialogs()
والجزء الذي أسميه بالداخل TCGeriArama_TabCtrl.cpp
void CTCGeriArama_TabCtrl::ActivateTabDialogs()
{
int nSel = GetCurSel();
if(m_Dialog[nSel]->m_hWnd)
m_Dialog[nSel]->ShowWindow(SW_HIDE);
CRect l_rectClient;
CRect l_rectWnd;
GetClientRect(l_rectClient);
AdjustRect(FALSE,l_rectClient);
GetWindowRect(l_rectWnd);
GetParent()->ScreenToClient(l_rectWnd);
l_rectClient.OffsetRect(l_rectWnd.left,l_rectWnd.top);
for(int nCount=0; nCount < m_nPageCount; nCount++){
m_Dialog[nCount]->SetWindowPos(&wndTop, l_rectClient.left, l_rectClient.top, l_rectClient.Width(), l_rectClient.Height(), SWP_HIDEWINDOW);
}
m_Dialog[nSel]->SetWindowPos(&wndTop, l_rectClient.left, l_rectClient.top, l_rectClient.Width(), l_rectClient.Height(), SWP_SHOWWINDOW);
m_Dialog[nSel]->ShowWindow(SW_SHOW);
}
//Selection change event for the class derived from CTabCtrl
void OnSelchange(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
ActivateTabDialogs(); // HERE'S WHERE THE COMPILER GIVES THE ERROR
*pResult = 0;
}
شكرًا.
المحلول 3
تبين أنني لم أضف المعالج باستخدام معالج الفصل ، ووضع الوظيفة OnSelChange()
يدويًا ، وكان ذلك يسبب المشكلة. شكرا جزيلا لاهتمامك
نصائح أخرى
حسنا على ما يبدو OnSelChange
هي وظيفة حرة. ActiveTabDialogs
هو وظيفة عضو في الفصل CTCGeriArama_TabCtrl
. يجب استدعاء وظائف الأعضاء على مثيل للفصل الذي هم عضو في. هناك خياران:
- يصنع
OnSelChange
وظيفة عضو فيCTCGeriArama_TabCtrl
جدا. - تغيير المكالمة إلى
someObj.ActiveTabDialogs()
وتوفيرOnSelChange
مع الإشارة إلى أCTCGeriArama_TabCtrl
-نموذج.
من مظهره OnSelChange
هو وظيفة رد الاتصال. ربما يكون من الصعب جعلها وظيفة عضو لأن ذلك من شأنه أن يغير نوع المؤشر. إذا كان هذا رد اتصال لبعض الإطار الذي تستخدمه ، فيجب عليك التحقق مما إذا كان هذا الإطار يوفر بعض الآلية لتمرير معلومات السياق إلى معالج رد الاتصال (ربما NMHDR* pNMHDR
-فيتر هو ل).
في الرابط الذي قدمه لك الوظيفة OnSelchange
هي وظيفة العضو.
لذا حاول التغيير
void OnSelchange(NMHDR* pNMHDR, LRESULT* pResult)
ل:
void CTCGeriArama_TabCtrl::OnSelchange(NMHDR* pNMHDR, LRESULT* pResult)