越来越'undeclared identifier'错误
-
26-09-2019 - |
题
下面的教程 http://www.codersource.net/mfc/mfc-tutorials/ctabctrl.aspx 我已经宣布的功能 ActivateTabDialogs()
在我的头文件,并称它是在另一个功能在我的课。编译器给人错误 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
是callback-function.它可能会难以使其成员能因为这将改变它的指针的类型。如果这是一个回对一些框架使用,应检查,如果该框架提供了一些机构通过的上下文的信息来回调处理程序(可能是什么的 NMHDR* pNMHDR
-参数)。
在由你给出的链接功能OnSelchange
是一个成员函数。
因此,尝试改变
void OnSelchange(NMHDR* pNMHDR, LRESULT* pResult)
为:
void CTCGeriArama_TabCtrl::OnSelchange(NMHDR* pNMHDR, LRESULT* pResult)
不隶属于 StackOverflow