2013-05-31 110 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成为一个(抽象)基类,它实际上并不拥有任何正确签名的成员函数。