2010-11-20 7 views
2

나는 다음과 같은 클래스가 함수 :C++ 포인터를 선언

] 정적 클래스 멤버 함수

FAQ에 따르면 16,
Process.h 

class Process 
{ 
    private: 
     static double (Point2D :: *getCoord)() const; //How to initialize in Process.cpp? 
     ... 
}; 

2] 비 클래스 멤버 함수

Process.h 

double (Point2D :: *getCoord)() const; //Linker error, how do declare? 

class Process 
{ 
    private: 
     ... 
}; 

답변

1

typedef 사용하는 것이 가장 좋습니다 :

typedef double (Point2D::*Point2DMemFn)() const; 

class Process 
{ 
     static Point2DMemFn getCoord; 
     ... 
}; 

초기화 :

Process::getCoord = &Point2D::getX; 
+0

'프로세스 :: getCoord = Point2D를 :: getX :

double (Point2D::* Process::getCoord)() const; 

당신은 초기화를 제공 할 수 있습니다 표현은 당신이 가지고있는 곳에서는 유효하지 않습니다. 그게 정의라고 생각 했나요? –

+0

질문은 포인터 getCoord를 선언/초기화하는 방법이었습니다. 먼저 선언 방법을 작성한 다음이를 초기화하는 방법을 썼습니다. – Dialecticus

+0

선언을 변경했지만 정의가 표시되지 않거나 (그 중 부족한 부분이 링크 오류의 원인 일 가능성이 높음) 초기화 (할당이 초기화와 동일하지 않음)가 표시되지 않습니다. 아마도 당신이 보여주고 자하는 것을 이해하지 못합니까? –

2

유일한 y를을 ou는 그것이 속한 클래스 이름으로 함수의 이름을 한정하는 것이 아닙니다. Process::getCoord의 정의를 제공하는 대신 getCoord이라는 전역 포인터를 선언했습니다. 어떤 유형이 없기 때문에, 그냥 할당의`올바른 정의 (또는 선언) 아니다

double (Point2D::* Process::getCoord)() const = &Point2D::getX; 
+0

감사합니다, 나는 역순으로 썼습니다 : double (프로세스 : : Point2D :: * getCoord)() const = & Point2D :: getX; – Ian