2013-05-31 6 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; Я получаю ошибку: Member 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 complete code_ (включая объявление вашего метода firstStrategy или любого другого метода) _ и error_, если вы хотите, чтобы мы помогали с ними. – Useless

+0

спасибо, я исправил его – user2105632

1

Я бы не стал инициатором lize его к определенной функции, лучше назначить ее, когда она вам действительно нужна. Скорее просто инициализировать его пустое значение:

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

Это также позволяет легко проверить, был ли использован strategyPointer, по if (strategyPointer!=nullptr) или просто if (strategyPointer).

И, наконец, это делает возможным использование Node базового класса (абстрактного), который фактически не имеет функций-членов правой подписи.

Смежные вопросы