Tôi đã viết một chương trình nhỏ mà tôi đang cố truyền con trỏ tới hàm thành viên của một lớp đến một hàm khác. Bạn có thể vui lòng giúp tôi và nơi tôi đang đi sai ..?Chuyển một con trỏ tới hàm thành viên của lớp như một tham số
#include<iostream>
using namespace std;
class test{
public:
typedef void (*callback_func_ptr)();
callback_func_ptr cb_func;
void get_pc();
void set_cb_ptr(void * ptr);
void call_cb_func();
};
void test::get_pc(){
cout << "PC" << endl;
}
void test::set_cb_ptr(void *ptr){
cb_func = (test::callback_func_ptr)ptr;
}
void test::call_cb_func(){
cb_func();
}
int main(){
test t1;
t1.set_cb_ptr((void *)(&t1.get_pc));
return 0;
}
Tôi gặp lỗi sau khi tôi cố gắng biên dịch nó.
error C2276: '&' : illegal operation on bound member function expression
Tôi luôn tìm thấy http://www.newty.de/fpt/index.html rất hữu ích. – arne
Chức năng thành viên không hoạt động. Loại bạn cần là 'void (test :: *) (void *)' ... –
Kerrek SB là đúng. Tuy nhiên nếu bạn có ý định gọi cùng một thành viên cho các lớp khác nhau và các trường hợp bạn nên suy nghĩ về thừa kế và ảo ... –