2016-10-20 1 views
1

함수 포인터가 클래스 멤버 인 함수 포인터로 함수를 호출하려고했습니다.Visual Studio의 비표준 구문; '&'를 사용하여 멤버에 대한 포인터를 만듭니다.

문제를 보여주기 위해 코드를 간단하게 만들었지 만 원래 코드의 foo() 함수는 이미 작성되어있어서 변경할 수 없습니다.

(내 실제 코드에서 foo는 GLFW ( glfwSetKeyCallback에서이다)과 A는 입력 핸들러 클래스입니다.)

코드는 다음과 같습니다

#include <iostream> 

    // this four line can not be changed 
    typedef void(*fptr)(int); 
    void foo(fptr f) { 
     f(0); 
    } 

    void testOutA(int i) { 
    } 

    class A { 
    public: 
     void testInA(int i) { 
     } 
    }; 

    int main() 
    { 
     foo(testOutA); // works fine as it should be 

     A * a = new A(); 

     foo(a->testInA); // ERROR 

     return 0; 
    } 

컴파일 오류 메시지는 다음과 같습니다

ERROR: error C3867: 'A::testInA': non-standard syntax; use '&' to create a pointer to member

+0

오류 메시지가 무엇입니까? –

+1

오류와 마찬가지로 '&'를 사용하여 멤버에 대한 포인터를 만들려고 했습니까? – TartanLlama

+0

잘 덧붙이 기 위해 노력했지만 지금까지 어디에 추가 할 지 모르겠다. 다음과 같은 것들을 tryed하지만 분명히 틀린 부분이있다 : & a -> testInA, -> & testInA, & (a-> testInA) – Sekkmer

답변

관련 문제