我做了一个出接口,需要在invoke()中调用某个类的成员函数,但是出现如下错误:
member from enclosing class is not a type name, static, or enumerator请问改如何解决?

解决方案 »

  1.   

    详细问题是这样的,请大家务必帮帮我!
    class CPNADlg : public CDialog
    {public:
    CPNADlg(CWnd* pParent = NULL,CFFMeasV4View *pView = NULL);  
    //这是一个eventsink类
    BEGIN_INTERFACE_PART(EventSink, IDispatch)
    STDMETHOD(Invoke)(DISPID, REFIID, LCID, unsigned short, DISPPARAMS*,  VARIANT*, EXCEPINFO*, unsigned int*);
    END_INTERFACE_PART(EventSink)
    public:
    //这是CPNADlg类的成员函数
    void GetPNAMeasData();
    现在我想要在invoke()函数中调用这个成员函数,出现了如下错误:
    STDMETHODIMP CPNADlg::XEventSink::Invoke(
    DISPID dispid, REFIID, LCID, unsigned short wFlags,
    DISPPARAMS* pDispParams, VARIANT* pvarResult,
    EXCEPINFO* pExcepInfo, unsigned int* puArgError)
    {
    if (dispid == 0x00000003) 
    {
    //被调用的CPNADlg类的成员函数
                GetPNAMeasData();
             } 
    return S_OK;}
    错误:CPNADlg::GetPNAMeasData' : member from enclosing class is not a type name, static, or enumerator
    请问这个问题该如何解决,xeventsink类应该是CPNADlg类的子类,为什么还会出现这种错误呢?
    谢谢!
      

  2.   

    不是,是嵌套类,class CPNADlg内部会有个XEventSink类型的数据成员,你可以通过数据成员this指针的偏移得到CPNADlg的this指针,然后调用它的成员函数