C ++ статический указатель на функцию - PullRequest
3 голосов
/ 30 ноября 2010

Я хотел бы иметь частный статический указатель на функцию в моем классе. По сути, это будет выглядеть так:

//file.h
class X {
private:
    static int (*staticFunc)(const X&);
    ...
public:
    void f();

};


//file.cpp
void X::f()
{
    staticFunc(*this);
}

Это дает мне ошибку "неразрешенный внешний символ". Я знаю, что статические члены также должны быть инициализированы в .cpp, я пробовал это:

int (X::*staticFunc)(const X&) = NULL;

но это дает мне ошибку "инициализация функции". Это дает мне более ужасную ошибку, если я пытаюсь инициализировать ее с помощью существующей функции. Без "= NULL" я получаю ту же ошибку.

Спасибо.

Ответы [ 3 ]

4 голосов
/ 30 ноября 2010
//file.cpp  
int (*X::staticFunc)(const X&);

void X::f()  
{  
staticFunc(*this);  
}
2 голосов
/ 30 ноября 2010

Это член X, поэтому вы должны сказать

int (*X::staticFunc)(const X&) = NULL;

В противном случае вы просто создадите глобальную переменную с именем staticFunc, которая не связана с этим статическим членом X.

0 голосов
/ 30 ноября 2010

Пара проблем здесь.

Первая ошибка - вы не передаете параметр при попытке использовать staticFunc.Это должно вызвать ошибку компилятора, о которой вы не сообщаете.

Вторая проблема - неправильный синтаксис.ТониК получил это.

...