C++ 클래스에서 함수포인터 사용하는거 질문좀..

레모네이드의 이미지

윈도우즈용하고 리눅스용하고 둘다 잘 동작하는 소프트웨어를 만드는 중에
다음 코드 부분에서 닷넷은 컴파일 되고 G++은 컴파일이 않되네요...
g++은 클래스의 함수에 대한 포인터를 사용하지 못하는 건지...

#include 
class   myclass {
public:
        virtual void f() {
                printf("myclass function f\n");
        }
};

typedef void (myclass::*ftype)();

int main(){
        myclass c;
        ftype f = (ftype)myclass::f;
        (c.*f)();
        return 0;
}

g++에서 정적함수가 아니라면서 컴파일 거부....음....
뭔가 컴파일옵션 주는게 있나요?...

익명사용자의 이미지

    ftype f = &myclass::f;
    (c.*f)();

로 해보세요.

레모네이드의 이미지

닷넷하고...조금은 다르군요....vc는 & 붙이거나 않붙이거나 상관없이 그냥 스탈데루 쓰라고 하던데..
gcc는 엄격하군요...오늘 하루는 구현 방법생각하느라 오전 보내고 닷넷으로 처리확인하구..
오후에는 gcc가능할까 해봤는데..않돼더라구요..왠종일 고생했는데.. & 하나 차이군요...
덕분에 오늘은 맘편히 잘수 있겠습니다...감사..~

gamdora의 이미지

닷넷의 C++은 Managed C++이라고 해서

표준 C++을 확장한 문법을 쓴다고 하는 걸 본 적이 있습니다.

kslee80의 이미지

Visual Studio 2003 버젼을 말씀하시는 건가요?

본문의 코드는 Visual Studio 2005 에서도 더이상 사용할 수 없는 스타일입니다.
http://msdn2.microsoft.com/en-us/library/ms177253.aspx
맨 처음에 나오는 "Pointer-to-members now require qualified name and &" 부분을 읽어보세요.
링크가 걸려있는 "Compiler Error C3867" 부분도 읽어보시구요.