zoukankan      html  css  js  c++  java
  • error C3867: “ClassA::OnFuncA”: 函数调用缺少参数列表;请使用“&ClassA::OnFuncA”创建指向成员的指针

    编译一段古老的VC6代码,发现一个类成员函数用作其他成员函数内部调用的参数的情况,会报错error C3867

    原始代码如下

    class TempalteBase
    {
    public:
      virtual HRESULT Call( int A, int B ) = 0;
    
      TempalteBase( UINT Id ) : m_TestID(Id) {
        //
      }
      UINT TestId() { return m_TestID; }
    
    protected:
      UINT m_TestID;
    };
    
    
    template <class BASECLASS> class TemplateA : public TempalteBase {
    public:
      typedef HRESULT (BASECLASS::*PFNMEMBERFUNCTION)( int A, int B );
    
      TemplateA( UINT Id, BASECLASS* pObject, PFNMEMBERFUNCTION pFunction  )
          : TempalteBase( Id ), m_pObject(pObject), m_pFunction(pFunction) {
        //
      }
      HRESULT Call( int A, int B ) {
        return (m_pObject->*m_pFunction)(A, B);
      }
    
    protected:
      BASECLASS* m_pObject;
      PFNMEMBERFUNCTION m_pFunction;
    };
    
    
    class ClassA {
    private:
    public:
      ClassA() {
        TempalteBase* p = new TemplateA<ClassA>(123, this, OnFuncA);
        p->Call(11, 22);
      }
      ~ClassA();
    public:
      HRESULT OnFuncA( int A, int B) {
        int a = A;
        int b = B;
        return 0;
      }
    };

    其中编译出错的一段代码是 

    TempalteBase* p = new TemplateA<ClassA>(123, this, OnFuncA);

    应该修改为

    TempalteBase* p = new TemplateA<ClassA>(123, this, &ClassA::OnFuncA);
  • 相关阅读:
    KVCKVO
    音频
    静态库
    百度地图API
    CALayer
    触摸事件
    iOS中打电话、打开网址、发邮件、发短信等
    NSURLSession网络接口
    Quartz2D常见图形的绘制:线条、多边形、圆
    通知中心(NSNotificationCenter)
  • 原文地址:https://www.cnblogs.com/cner/p/13331121.html
Copyright © 2011-2022 走看看