2012-08-30 21 views
46

Estoy tratando de hacer algunas pruebas con el puntero de la función miembro. ¿Qué está mal con este código? La instrucción bigCat.*pcat(); no se compila. Se requiere que¿Cómo llamar a través de un puntero de función miembro?

class cat { 
public: 
    void walk() { 
     printf("cat is walking \n"); 
    } 
}; 

int main(){ 
    cat bigCat; 
    void (cat::*pcat)(); 
    pcat = &cat::walk; 
    bigCat.*pcat(); 
} 

Respuesta

77

Más paréntesis:

(bigCat.*pcat)(); 
^   ^

La llamada de función (()) tiene mayor precedencia que el operador-puntero a miembro de unión (.*). Los operadores unarios tienen mayor prioridad que los operadores binarios.

+0

@AdrianCornish: No, pero 'pcat' no nombra un miembro, nombra el puntero a miembro declarado como una variable local en' main'. –

+0

¿Puede incluso llamar a un miembro func así (nunca lo intentó) –

+2

@AdrianCornish: Sí. –

Cuestiones relacionadas