我在类中定义函数指针并尝试通过类的实例访问它,但它显示错误。
以下是代码:
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
请帮帮我。
提前谢谢你。
答案 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。即使您不遵循这些说明,也请阅读该页面。它有很多关于成员函数指针的有用信息。