4

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

这是代码:

 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

请帮我。

先感谢您。

4

3 回答 3

2

这里的问题是 funcPtr 是在 pt 内部声明的,因此您需要使用名称 pt 两次 - 一次作为指向成员选择的指针的左侧,一次用于选择要从中选择的指针类函数指针:

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

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

希望这可以帮助!

于 2012-03-30T15:37:47.310 回答
1

我想你的意思是

pt->*(pt->funcPtr)(3);
于 2012-03-30T15:45:04.687 回答
1

我将建议您按照C++ FAQ 中的说明进行操作。通常,该作者会避免使用typedefs 和#defines,但对于这种情况,他会例外:

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

Ps 即使您不遵循这些说明,请阅读该页面。它包含大量关于指向成员函数的指针的有用信息。

于 2012-03-30T16:18:24.420 回答