访问类内部的函数指针

Accessing function pointer inside class

本文关键字:函数 指针 内部 访问      更新时间:2023-10-16

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

这是代码:

 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

请帮帮我。

提前谢谢。

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

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

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

希望这能有所帮助!

我想你指的是

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

我建议您按照C++常见问题解答中的说明进行操作。通常情况下,作者会避免typedefs和#defines,但在这种情况下,他会例外:

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

附言:即使你没有按照这些说明去做,也要读那一页。它包含大量关于指向成员函数的指针的有用信息。