在下面顯示的簡單代碼中,有一個函數run7
,它接收函數作爲參數。在main
函數中,函數test
被傳遞給它,它工作正常。但是,我的method2
無法通過method1
到此功能。它會導致錯誤:C++傳遞另一個方法作爲參數
main.cpp:24:15: error: cannot convert ‘A::method1’ from type ‘void (A::)(int)’ to type ‘void (*)(int)’
run7(method1);
^
我要打電話傳遞method1
到run7
不改變run7
結構。如何修復method2
?
#include <iostream>
using namespace std;
void run7 (void (*f)(int))
{
f(7);
}
void test(int a)
{
cout<<a<<endl;
}
class A
{
public:
int m=4;
void method1(int a)
{
cout<< a*m <<endl;
}
void method2()
{
run7(method1);
}
};
int main()
{
run7(test);
return 0;
}
函數指針是不是與方法指針相同。你需要多研究一下。 – Cameron
你也許可以綁定或其他魔法。你的問題是method1是非靜態的,所以'method1'的類型是'void(A :: *)(int)',並且你想接受類型爲'void(*)(int)'的參數,這很清楚不是一回事。如果你真的想將method1傳遞給它,你必須使它靜態。 – Creris