访问类中的函数指针

时间:2012-03-30 15:28:50

标签: c++ function-pointers pointer-to-member

我在类中定义函数指针并尝试通过类的实例访问它,但它显示错误。

以下是代码:

 1 #include<stdio.h>
 2 
 3 class pointer {
 4 public:
 5    int (pointer::*funcPtr)(int);
 6    pointer() {
 7       funcPtr = &pointer::check;
 8    }
 9 
10 
11    int check(int a)
12    {
13       return 0;
14    }
15 
16 };
17 
18 int main()
19 {
20    pointer *pt=new pointer;
21    return (pt->*funcPtr)(3);
22 }

它显示编译时错误:

checkPointer.cpp:21:15: error: ‘funcPtr’ was not declared in this scope

请帮帮我。

提前谢谢你。

3 个答案:

答案 0 :(得分:2)

这里的问题是funcPtr是在pt中声明的,所以你需要使用名称pt两次 - 一次作为指向成员选择的指针的左侧,一次从中选择指针类选择funcPtr:

(fn->*(fn->funcPtr))(3);

这样做的原因是你可能会调用另一个指针实例上一个指针实例的funcPtr成员指向的函数。

希望这有帮助!

答案 1 :(得分:1)

我认为你的意思是

pt->*(pt->funcPtr)(3);

答案 2 :(得分:1)

我建议您按照instructions from the C++ FAQ进行操作。通常情况下,该作者会避免使用typedef#define s,但在这种情况下,他会例外:

#define CALL_MEMBER_FN(object,ptrToMember)  ((object).*(ptrToMember))
…
    CALL_MEMBER_FN(*pt, pt->funcPtr)(3)

P.S。即使您不遵循这些说明,也请阅读该页面。它有很多关于成员函数指针的有用信息。