我正在尝试将函数作为参数传递给不同的函数。
由于某种原因它无法正常工作。
//myClass.h
class MyClass
{
public:
typedef int (*MyClass::ptrToMember)(float, char);
ptrToMember p1;
MyClass::MyClass();
void hello(ptrToMember fun);
int SendIt (float a, char b);
};
//MyClass.cpp
MyClass::MyClass(){
p1 = &(MyClass::SendIt);
hello(p1);
}
int MyClass::SendIt (float a, char b)
{
std::cout << "MyClass::SendIt "<<a<<std::endl;
return 1;
}
void MyClass::hello(ptrToMember fun){
int result = (*fun)(12, 'a');
std::cout << result << std::endl;
}
如果有人能告诉我我的错误是什么,会很感激。
答案 0 :(得分:3)
typedef int (*MyClass::ptrToMember)(float, char);
^
// your mistake is here
类成员函数的指针声明如下:
typedef int (MyClass::*ptrToMember)(float, char);
^
并且这样调用(测试是类实例 - 也可以是'this'):
(test.*pointer)(parameters) // if test is automatically allocated
或
(test->*pointer)(parameters) // if test is a pointer
decleration运算符为::*
,而调用指向成员函数的指针的运算符为.*
和->*
。
修改强>
这一行:
p1 = &(MyClass::SendIt);
实际上必须是:
p1 = &MyClass::SendIt; // without parentheses
答案 1 :(得分:1)
说出来:
typedef int (MyClass::*ptrToMember)(float, char);
// ...
int result = (this->*fun)(12, 'a');