2013-08-28 7 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 с этими исправлениями.

Смежные вопросы