2013-08-28 200 views
-1

我正在嘗試一個代碼片段,並在VS2010上遇到以下錯誤。從成員函數傳遞函數指針

Error 1 error C2276: '&' : illegal operation on bound member function expression Line 19 

以下是我的代碼:

#include<iostream> 
using namespace std; 
class a 
{ 
public: 
    void add(int x) 
    { 
     cout<<x+x<<endl; 
    } 
    void mult(int x) 
    { 
     cout<<x*x<<endl; 
    } 
    typedef void (a::*fptr)(int); 
    fptr retFuncP(char ch) 
    { 
     if(ch=='+') 
     { 
      return &add; 
     } 
     else 
     { 
      return &mult; 
     } 
    } 
}; 
int main() 
{ 
    a objA; 
    void (a::*fptr)(int) = objA.retFuncP('+'); 
    (objA.*fptr)(3); 
    cin.ignore(); 
} 

使用void (a::*retFuncP(char ch))(int x)作爲替代並沒有解決問題爲好。這似乎是錯誤的?

回答

2

您需要使用&a::add而不是&add,因爲add是一個成員函數。與&mult相同,這需要是&a::mult。請參閱demo這些修補程序。