2017-05-20 1 views
0

그게 내가하려는거야 : 나는 함수 포인터입니다 클래스 (부탁) 클래스 오순절 있습니다. 생성자에서 나는 같은 클래스의 일부 메소드를 포인터에 할당하고 (일부 조건에 따라 다름) 다른 메소드에서 사용하려고합니다. 예를 들면 : 나는 CodeBlocks에서이 코드를 컴파일 할 때C++ : 동일한 클래스의 function-pointer-member (atribute)에 메서드를 매핑 할 수 있습니까?

class monton 
{ 
private: 
protected: 

    bool (*comparador)(int a, int b); 

    inline bool mayor(int a, int b) {return a > b;} 
    inline bool menor(int a, int b) {return a < b;} 
    ... 

public: 
    monton (bool maximo = true) 
    { 
    if(maximo) comparador = mayor; 
    else  comparador = menor; 
    } 
    ... 
}; 

,이 오류가 발생합니다 :

error: cannot convert ‘monton::mayor’ from type ‘bool (monton::)(int, int)’ to type ‘bool (*)(int, int)’| 

답변

1

이 오류가 비 정적 멤버 함수에 대한 포인터를 할당하려고 있음을 알려줍니다 일반 함수 포인터 유형의 변수. 정확한 포인터 선언은 다음과 같습니다

bool (monton::*comparador)(int a, int b); 
// or even better with type alias 
using t_ComparadorPointer = bool (monton::*)(int a, int b); 
t_ComparadorPointer comparador; 
+0

고마워요. 나는 또한 asigned 후 내 함수 포인터를 사용하는 데 문제가있었습니다. 그러나 나는이 sintax와 함께 사용할 수있는 것을 발견했다 : '(this -> * comparador) (x, y)' –

+0

그리고 나는이 sintax 포인터를 부름시켜야했다 : 'comparador = & monton :: mayor;' 그것이 정확하고 적합한 지 궁금하거나 미래의 문제를 만들고 있습니다. 고마워. –

+0

이러한 함수의 특성 (어떤 식 으로든 클래스 인스턴스에 종속되지 않음)을 감안할 때 더 나은 대안은 정적으로 만드는 것입니다. 그런 다음 함수 포인터에 할당 할 수 있습니다. –

관련 문제