无法从' int(__thiscall A :: * *)(void)'转换参数1 to' int(__ cdecl *)(void)'

时间:2017-05-29 13:33:05

标签: c++

运行此代码时出现此错误。请查看我的代码并帮助我。

#include "stdafx.h"
#include <iostream>
class A
{
  public:
    void PrintTwoNumbers(int (*numberSource)(void)) 
    {
      int val1= numberSource();     
    }

    int overNineThousand(void) 
    {
      return (rand()%1000) + 9001;
    }        
};

int _tmain(int argc, _TCHAR* argv[])
{ 
  int (A::*fptr) (void) = &A::overNineThousand;

  int (A::*fptr1) (void);
  fptr1 = &A::overNineThousand;

  A a;
  a.PrintTwoNumbers(&fptr); //-> how to pass here
  getchar();
  return 0; 
}

我厌倦了在线搜索,没有人为此提供完美的解决方案。任何人都可以编辑这段代码作为工作代码并帮助我吗?

1 个答案:

答案 0 :(得分:0)

期望的参数是(非成员)函数指针。您改为将(指向a)指针传递给成员函数。 (指针)指向成员函数的指针不能转换为指向(非成员)函数的指针。

最简单的解决方案可能是将函数参数修复为正确类型,传递隐式对象参数,并在调用时不要使用成员函数指针的地址。

void PrintTwoNumbers(int (A::*numberSource) ()) 
{
  int val1= (this->*numberSource)();
}

a.PrintTwoNumbers(fptr);