‚Nicht deklarierter Bezeichner‘ bekommen Fehler
-
26-09-2019 - |
Frage
Nach dem Tutorial unter http://www.codersource.net/mfc/ mfc-tutorials / ctabctrl.aspx , ich habe die Funktion ActivateTabDialogs()
in meiner Header-Datei deklariert und es in einer anderen Funktion in meiner Klasse. Der Compiler gibt Fehler C2065: 'ActivateTabDialogs' : undeclared identifier
, an der Linie ActivateTabDialogs();
innerhalb der Definition der Funktion OnSelChange()
. Was mache ich hier zu verletzen?
Hier ist meine Erklärung Teil in der Header-Datei 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();
Hier ist die Definition von ActivateTabDialogs()
und der Teil ich bin es in TCGeriArama_TabCtrl.cpp
Aufruf
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;
}
Danke.
Lösung 3
Es stellte sich heraus, dass ich nicht den Handler mit dem Klassen-Assistenten hinzugefügt haben, und setzen Sie die Funktion OnSelChange()
manuell, und das war das Problem verursacht. Vielen Dank für Ihre Aufmerksamkeit
Andere Tipps
Nun offenbar OnSelChange
ist eine kostenlose Funktion. ActiveTabDialogs
ist Mitglied-Funktion der Klasse CTCGeriArama_TabCtrl
. Member-Funktionen haben auf eine Instanz der Klasse, die sie sind Mitglied genannt werden. Es gibt zwei Möglichkeiten:
- Make
OnSelChange
Mitglied Funktion vonCTCGeriArama_TabCtrl
zu. - Ändern Sie den Aufruf an
someObj.ActiveTabDialogs()
und bietenOnSelChange
mit einem Verweis auf eineCTCGeriArama_TabCtrl
-Instanz.
Von den Blicken von ihm OnSelChange
ist eine Callback-Funktion. Es wäre wahrscheinlich schwierig sein, es ein Mitglied-Funktion zu machen, wie das wäre es der Zeigertyp verändern. Wenn dies ein Rückruf für einige Rahmen ist, die Sie verwenden, sollten Sie prüfen, ob dieser Rahmen einen Mechanismus bietet kontext Informationen an den Callback-Handler übergeben (wahrscheinlich das, was der NMHDR* pNMHDR
-Parameter ist für).
In der Verbindung von Ihnen angesichts der Funktion OnSelchange
ist eine Memberfunktion.
So versuchen zu ändern
void OnSelchange(NMHDR* pNMHDR, LRESULT* pResult)
zu:
void CTCGeriArama_TabCtrl::OnSelchange(NMHDR* pNMHDR, LRESULT* pResult)