2015-12-10 6 views
2

Существует много разговоров о указателях с функциями-членами, но у меня возникли проблемы с проблемой со скрытым состоянием констант функций-членов. Может ли кто-нибудь дать мне более простой ответ, что я здесь делаю неправильно?Функция функции-члена для функции-члена

class Entity 
{ 
public: 
    Entity(); 
    void(Entity::*update_function)(); 
private: 
    void update_mode_1() { 
    } 
}; 

Entity::Entity() 
{ 
    update_function = update_mode_1; 
    //error C3867: 'Entity::update_mode1': non-standard syntax; use '&' to create a pointer to member 
} 

void test_init() { 
    Entity obj; 
    obj.update_function(); 
    //Error: Expression preceding parenthesis of apparent call must have (pointer-to-) function type 
} 
+1

Там нет «проблемы с скрытым сопзИте состоянием» здесь, а также есть два очень явные сообщений. – EJP

ответ

4

Вот решение, как решить ошибки, во всяком случае, кажется, не имеет ничего общего с «скрытой сопзЬ состоянием функций-членов».

error C3867: 'Entity::update_mode1': non-standard syntax; use '&' to create a pointer to member

Как сказано в сообщении об ошибке, используйте & создать указатель на член.

update_function = &Entity::update_mode_1; 

Error: Expression preceding parenthesis of apparent call must have (pointer-to-) function type

Использование pointer-to-member access operator (например, оператором .*) для его вызова.

(obj.*(obj.update_function))(); 

LIVE

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