【问题标题】:Accessing function pointer inside class访问类内的函数指针
【发布时间】:2012-03-30 15:28:49
【问题描述】:

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

代码如下:

 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

请帮帮我。

提前谢谢你。

【问题讨论】:

  • +1 欢迎来到 Stack Overflow!感谢您提供完整、简洁的测试用例。请参阅 sscce.org 了解我希望每个人都这样做的原因。

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


【解决方案1】:

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

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

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

希望这会有所帮助!

【讨论】:

  • @fschmitt- 我不这么认为。 funcPtr 是我要选择的 pt 数据成员的名称。您不需要使用范围解析来选择指向成员函数的指针。
【解决方案2】:

我想你的意思是

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

【讨论】:

    【解决方案3】:

    我建议你关注instructions from the C++ FAQ。通常,该作者会避免使用typedefs 和#defines,但对于这种情况,他会例外:

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

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

    【讨论】:

      猜你喜欢
      • 2017-09-29
      • 2015-07-25
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 1970-01-01
      • 2014-01-03
      • 2021-06-20
      • 1970-01-01
      相关资源
      最近更新 更多