2013-05-31 4 views
0

클래스의 멤버 함수에 대한 함수 포인터가 있습니다. 컴파일 할 때마다 경고 메시지를 받기 때문에이 함수 포인터를 어떻게 초기화해야합니까? 여기에 코드입니다 :C++ 생성자에서 함수 포인터 초기화

//Node.h 
class Node{ 
    bool (Node::*strategyPointer)(const unsigned int&); 
    Node(); 
}; 

//Node.cpp 
Node::Node(){ 

    //How do I initialize my pointer here? 
} 

덕분에 첫째

+2

현재 초기화 작업을 어떻게하고 계시 며 어떤 경고를 받으시겠습니까? – Angew

+0

현재 어떤 초기화도하고 있지 않습니다. 멤버 함수에서 다음과 같이 사용하고 있습니다 : strategyPointer = & Node :: peeringStrategyOpen; 오류가 발생했습니다 : MemberPointer가이 생성자에서 초기화되지 않았습니다. – user2105632

+0

저에게 배정 된 내용에 오류가있는 것 같지 않습니다. (최소한의) 완전한 코드를 보여주십시오. – Useless

답변

1

, 당신은 법적으로 가리킬 수있는 방법이없는, 그래서 몇 가지 추가 할 수 있습니다 :

class Node{ 
    bool (Node::*strategyPointer)(const unsigned int&); 

    bool firstStrategy(const unsigned int&) { return true; } 
    bool secondStrategy(const unsigned int&) { return false; } 

public: 
    Node(); 
}; 

지금 우리가 가지고를 올바른 값을 사용하여 초기화하려면 다음을 사용하십시오.

Node::Node() : strategyPointer(&Node::firstStrategy) {} 
+0

constructor에서 strategyPointer (& Node :: firstStrategy) {}를 사용하면 구문 오류가 발생합니다. 구문이 맞습니까? – user2105632

+2

예. _minimal 완전한 코드 _ (당신의'firstStrategy' 또는 무엇이든 메소드의 선언을 포함하여) _와 우리가 그들을 도와주기를 원하면 error_를 보여주십시오. – Useless

+0

고마워 고마워. – user2105632

1

저는 initia가 아닙니다. 특정 기능에 맞게, 실제로 필요할 때 기능을 할당하는 것이 좋습니다. 오히려 단지 null로 초기화 :

Node::Node() : strategyPointer(nullptr) 
{ 
} 

를이 또한 쉽게 if (strategyPointer!=nullptr)하거나 if (strategyPointer)에 의해, strategyPointer가 사용되었는지 여부를 테스트 할 수 있습니다.

마지막으로이 방법을 사용하면 Node이 실제로 올바른 서명의 멤버 함수를 갖고 있지 않은 (추상) 기본 클래스가 될 수 있습니다.