0

我正在尝试将函数作为参数传递给不同的函数。

由于某种原因,它不起作用。

//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;
}

如果有人能告诉我我的错误是什么,将不胜感激。

4

2 回答 2

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 运算符是::*,而调用指向成员函数的指针的运算符是.*and ->*

编辑:

这一行:

p1 = &(MyClass::SendIt);

实际上必须是:

p1 = &MyClass::SendIt; // without parentheses
于 2012-08-21T16:25:18.587 回答
1

说这个:

typedef int (MyClass::*ptrToMember)(float, char);

// ...

int result = (this->*fun)(12, 'a');
于 2012-08-21T16:25:08.593 回答