2016-10-26 3 views
0

Я пытаюсь вызвать метод, инициализированный указателем на метод другого класса, я следил за this: , но это не сработало для меня.Метод класса вызова нестатический, инициализированный указателем

считают это:

class y 
{ 
    public: 
     int GetValue(int z) 
     { 
      return 4 * z; 
     } 
}; 


class hooky 
{ 
    public:  
     int(hooky::*HookGetValue)(int); 
}; 


int(hooky::*HookGetValue)(int) = (int(hooky::*)(int))0x0; // memory address or &y::GetValue; 



int main() 
{ 
    hooky h; // instance 
    cout << h.*HookGetValue(4) << endl; // error 
    return 0; 
} 

ошибка, которая производит это:

[Error] следует использовать. 'или' -> 'для вызова функции указатель-член в ' HookGetValue (...) ', например. '(... -> * HookGetValue) (...)'

+1

Я думаю, вы должны написать '(ч. * HookGetValue) (4)' вместо этого? –

+0

@AdrianShum благодарит много, но почему работает? пожалуйста, вы можете сказать мне? Я не понимаю, если это то же самое. – nikomaster

+1

проверить мое обновление –

ответ

1

Правильный синтаксис для вызова указателя функции член

(h.*HookGetValue)(4) 

Update: причина исходный код не работа, как и ожидалось, связана с приоритетом оператора C++: вызов функции () имеет более высокий приоритет, чем ptr, члену .*. Что означает

h.*HookGetValue(4) 

будет видеть, как

h.*(HookGetValue(4))