C++ 获得';未声明的标识符';错误

C++ 获得';未声明的标识符';错误,c++,function-declaration,undeclared-identifier,C++,Function Declaration,Undeclared Identifier,在上的教程之后,我在头文件中声明了函数ActivateTabDialogs(),并在类中的另一个函数中调用它。编译器在ActivateTabDialogs()行给出错误C2065:“ActivateTabDialogs”:未声明的标识符在函数的定义中OnSelChange()。我在这里违反了什么 下面是头文件TCGeriArama\u TabCtrl.h class CTCGeriArama_TabCtrl : public CTabCtrl { // Construction public:

在上的教程之后,我在头文件中声明了函数
ActivateTabDialogs()
,并在类中的另一个函数中调用它。编译器在
ActivateTabDialogs()行给出错误
C2065:“ActivateTabDialogs”:未声明的标识符
在函数的定义中
OnSelChange()
。我在这里违反了什么

下面是头文件
TCGeriArama\u 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\u 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;
}
void CTCGeriArama\u TabCtrl::ActivateTabDialogs()
{
int-nSel=GetCurSel();
如果(m_对话框[nSel]->m_hWnd)
m_对话框[nSel]->显示窗口(SW_隐藏);
正确的客户;
纠正错误;
GetClientRect(l_rectClient);
AdjustRect(假,l_rect客户端);
GetWindowRect(l_rectWnd);
GetParent()->ScreenToClient(l_recwnd);
l_rectClient.OffsetRect(l_rectWnd.left,l_rectWnd.top);
对于(int-nCount=0;nCountSetWindowPos(&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_对话框[nSel]->显示窗口(SW_显示);
}
//从CTabCtrl派生的类的选择更改事件
无效帮助更改(NMHDR*pNMHDR、LRESULT*PRESLT)
{
//TODO:在此处添加控件通知处理程序代码
ActivateTabDialogs();//这里是编译器给出错误的地方
*预设值=0;
}

谢谢。

在您提供的链接中,函数
OnSelchange
是一个成员函数

所以试着改变

void OnSelchange(NMHDR* pNMHDR, LRESULT* pResult)
致:


在您提供的链接中,函数
OnSelchange
是一个成员函数

所以试着改变

void OnSelchange(NMHDR* pNMHDR, LRESULT* pResult)
致:


显然,
OnSelChange
是一个自由函数
ActiveTabDialogs
是类
CTCGeriArama\u TabCtrl
的成员函数。成员函数必须在其所属类的实例上调用。有两种选择:

  • 使
    OnSelChange
    也成为
    ctcGerarama\u TabCtrl
    的成员函数
  • 将调用更改为
    someObj.ActiveTabDialogs()
    ,并提供
    OnSelChange
    ctcgerarama\u TabCtrl
    -实例的引用

  • 从外观上看,selchange是一个回调函数。可能很难使其成为成员函数,因为这会改变其指针类型。如果这是您正在使用的某个框架的回调,您应该检查该框架是否提供了某种机制来将上下文信息传递给回调处理程序(可能是
    NMHDR*pNMHDR
    -参数的作用)。

    显然
    OnSelChange
    是一个免费函数
    ActiveTabDialogs
    是类
    CTCGeriArama\u TabCtrl
    的成员函数。成员函数必须在其所属类的实例上调用。有两种选择:

  • 使
    OnSelChange
    也成为
    ctcGerarama\u TabCtrl
    的成员函数
  • 将调用更改为
    someObj.ActiveTabDialogs()
    ,并提供
    OnSelChange
    ctcgerarama\u TabCtrl
    -实例的引用

  • 从外观上看,selchange是一个回调函数。可能很难使其成为成员函数,因为这会改变其指针类型。如果这是您正在使用的某个框架的回调,您应该检查该框架是否提供了某种机制来将上下文信息传递给回调处理程序(可能是
    NMHDR*pNMHDR
    -参数的作用)。

    结果表明,我没有使用类向导添加处理程序,并将函数
    放在selchange()上
    手动操作,这是导致问题的原因。非常感谢您的关注

    原来我没有使用类向导添加处理程序,而是手动将函数
    放在selchange()
    上,这就是问题的原因。非常感谢您的关注

    您是否将.h文件包含到.cpp文件中?是的,如下所示:#包含“TCGeriArama_TabCtrl.h”您能告诉我们错误发生在哪一行吗?是的,对不起,在函数OnSelchange()的底部,我正在调用activateBdialogs(),编译器在哪里向您提供错误?请向我们展示给出错误的代码(您可以在代码中用注释指示准确的行)。您是否将.h文件包含到.cpp文件中?是的,如下所示:#包括“TCGeriArama_TabCtrl.h”您能告诉我们错误发生在哪一行吗?是的,对不起,在函数OnSelchange()的底部,我正在调用activateBdialogs()编译器在哪里给出错误?请向我们展示给出错误的代码(您可以在代码中用注释指示确切的行)。实际上,我遇到了两个错误,唯一可以消除其中一个错误的方法是删除MyTabCtrl部分,这个“未声明”的错误是unaffected@Halo:显示两个错误,您不应该删除类名。好的,我将它作为成员函数放回去,现在得到“error C2039:'OnSelchange':不是“CTCGeriArama_TabCtrl”的成员。我应该为此发布一个新主题还是从这里继续?实际上,我遇到了两个错误,唯一可以消除一个错误的方法是删除MyTabCtrl部分,这个“未声明”的错误是unaffected@Halo:显示两个错误,您不应该删除类名。好的,我将它作为成员函数放回,现在得到“error C2039:'OnSelchange':不是'CTCGeriArama_TabCtrl'的成员。我应该为此发布一个新主题还是从这里继续?谢谢,我将OnSelchange设置为一个成员函数,现在编译器给出了”error C2039:'OnSel'