아래에 표시된 간단한 코드에는 함수를 인수로받는 run7
함수가 있습니다. main
함수에서 함수 test
이 전달되고 올바르게 작동합니다. 그러나 내 method2
method1
이이 함수를 전달할 수 없습니다. 그것은 원인이 오류 :C++에서 다른 메서드를 인수로 전달
run7
의 구조를 변경하지 않고
run7
에
method1
을 통과 호출 할
main.cpp:24:15: error: cannot convert ‘A::method1’ from type ‘void (A::)(int)’ to type ‘void (*)(int)’
run7(method1);
^
. 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;
}
기능 포인터가 아니라 당신이 대신 수행 할 수있는
는 형식 삭제 펑터를 취할
run
을 변경할 수있다 메소드 포인터와 동일합니다. 이것을 조금 더 연구해야합니다. – Cameron당신은 바인드 또는 다른 마법과 함께 할 수 있습니다. 문제는 method1이 nonstatic이기 때문에'method1'의 타입이'void (A :: *) (int)'이고 당신이 분명히 타입 인'void (*) (int) '타입의 인자를 받아들이 길 원합니다. 같은 것이 아닙니다. method1을 실제로 전달하려면 정적으로 만들어야합니다. – Creris