2013-05-31 111 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;我收到錯誤:成員strategyPointer未在此構造函數中初始化。 – 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

當我在構造函數中使用strategyPointer(&Node :: firstStrategy){}時,它給我一個語法錯誤。那句話對嗎? – user2105632

+2

是的。顯示_minimal完整的code_(包括你的'firstStrategy'或任何方法的聲明)_和錯誤_如果你想讓我們幫助他們。 – Useless

+0

謝謝我修好了 – user2105632

1

我不想要把它放到一個特定的函數中,最好在實際需要時將它分配給它。而是僅僅把它初始化爲空:

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

這也可以讓你輕鬆地測試strategyPointer是否已被使用,由if (strategyPointer!=nullptr)或只是if (strategyPointer)

最後,這樣做可以讓您選擇讓Node成爲一個(抽象)基類,它實際上並不擁有任何正確簽名的成員函數。