函数指针指向成员函数

时间:2016-12-10 12:31:45

标签: c++ function pointers

我只是学习函数指针,想测试它如何与成员函数一起工作。以下代码的编译在标记的位置失败。

# include <iostream>
# include <stdio.h>
using namespace std ;

class TMyClass {
public:
  int DoIt ( float a, char b, char c ) {
    cout << " TMyClass::DoIt " << endl ;
    return a + b + c ;
  }

  int DoMore ( float a, char b, char c ) {
    cout << " TMyClass::DoMore " << endl ;
    return a - b + c ;
  }

  int ( TMyClass::*pt2Member ) ( float, char, char ) ;

  int test_function_pointer ( ) {
    this->pt2Member = &TMyClass::DoMore ;
    int result = ( this -> *pt2Member ) ( 12, 'a', 'b' ) ; // wrong!
    // expected unqualified-id before "*" token

    return 0 ;
  }
} ;

int main () {
  TMyClass A ;
  A.test_function_pointer () ; 
  return 0 ;
}

我想知道如何让它发挥作用。谢谢!

2 个答案:

答案 0 :(得分:5)

空间有多大区别:

int result = ( this ->* pt2Member ) ( 12, 'a', 'b' );
                 // ^^^

->*是自己的运营商。

请参阅固定演示here

答案 1 :(得分:0)

这一行:

int result = ( this -> *pt2Member ) ( 12, 'a', 'b' ) ; // wrong!

应该是:

int result = ( this ->*pt2Member ) ( 12, 'a', 'b' ) ; // wrong!

- &gt; *是一个运算符,你不能在其中插入空格,因为它将它分成两个不同的运算符: - &gt;和*。这类似于&lt;&lt;&gt;&gt;, - ,+,它也不能用空格分成两个不同的标记。