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);
  • 相关阅读:
    Oracle导出txt文本文件
    oracle spool
    [Oracle, MySQL] Oracle通过dblink连接MySQL
    正则表达式速查表
    常用的正则表达式
    python3 打印九九乘法口诀表
    canda 常用命令
    python3 拼接字符串的7种方法
    Python 字符串格式化输出方式
    PyCharm 解决有些库(函数)没有代码提示
  • 原文地址:https://www.cnblogs.com/cner/p/13331121.html
Copyright © 2011-2022 走看看