我有一個函數指針指向類中的成員函數。我如何初始化這個函數指針,因爲我每次都會收到編譯警告。下面是代碼:C++在構造函數中初始化函數指針
//Node.h
class Node{
bool (Node::*strategyPointer)(const unsigned int&);
Node();
};
//Node.cpp
Node::Node(){
//How do I initialize my pointer here?
}
感謝
我有一個函數指針指向類中的成員函數。我如何初始化這個函數指針,因爲我每次都會收到編譯警告。下面是代碼:C++在構造函數中初始化函數指針
//Node.h
class Node{
bool (Node::*strategyPointer)(const unsigned int&);
Node();
};
//Node.cpp
Node::Node(){
//How do I initialize my pointer here?
}
感謝
首先,你不用它可能合法指向任何方法,所以讓我們添加一些:
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) {}
當我在構造函數中使用strategyPointer(&Node :: firstStrategy){}時,它給我一個語法錯誤。那句話對嗎? – user2105632
是的。顯示_minimal完整的code_(包括你的'firstStrategy'或任何方法的聲明)_和錯誤_如果你想讓我們幫助他們。 – Useless
謝謝我修好了 – user2105632
我不想要把它放到一個特定的函數中,最好在實際需要時將它分配給它。而是僅僅把它初始化爲空:
Node::Node() : strategyPointer(nullptr)
{
}
這也可以讓你輕鬆地測試strategyPointer
是否已被使用,由if (strategyPointer!=nullptr)
或只是if (strategyPointer)
。
最後,這樣做可以讓您選擇讓Node
成爲一個(抽象)基類,它實際上並不擁有任何正確簽名的成員函數。
您目前如何進行初始化,以及您得到了哪些警告? – Angew
我目前沒有做任何初始化。我在成員函數中使用它們,如下所示:strategyPointer =&Node :: peeringStrategyOpen;我收到錯誤:成員strategyPointer未在此構造函數中初始化。 – user2105632
這聽起來不像是給我的任務中的錯誤,請顯示(最小)完整的代碼。 – Useless