Ошибка при сохранении функции-члена в виде указателей на функции в C++

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

Что-то вроде этого:

// abc.h
namespace XYZ {
typedef void func(const uint8_t *buf, int len);
struct holder
{
    // other members
    func * storePtr;
}
} // end of namespace

другой файл как:

// pqr.h
#include abc.h
namespace XYZ {
 class pqr {
   // data members and other functions
   void func1(const uint8_t *buffer, int length);
   void func2(func *section);
   void func3();
   }
} // end of namespace

Теперь мой файл cpp должен хранить экземпляр этого func1 в моем элементе структуры storePtr.

// app.cpp
#include pqr.h
void pqr::funct3()
{
   // Do something
   func2(func1);
}
void pqr::func2(func * section)
{
   holder h;
   h.storePtr = section;
}

Но я получаю ошибку компиляции в строке "func2 (func1);" как "ошибка C3867: 'pqr::func1': функция вызывает отсутствующий список аргументов; используйте '&pqr::func1' для создания указателя на элемент"

Я использовал &pqr:: для определения области, но это также не решает мою проблему, и я не могу понять, что делать.


person Garfield    schedule 20.03.2012    source источник


Ответы (1)


Указатели на функции-члены — это не то же самое, что указатели на обычные функции. Взгляните на объяснение и пример здесь: http://msdn.microsoft.com/en-us/library/k8336763.aspx

person MiMo    schedule 20.03.2012
comment
Но как мне вызвать функцию-член из указателя функции, хранящегося в структуре? Если я сохраню созданную структуру и использую ее позже для вызова функции. - person Garfield; 21.03.2012
comment
Если это нестатическая функция-член, вам всегда нужен объект, чтобы иметь возможность ее вызывать — объект является неявным параметром функции. Вы должны либо сохранить объект, а также указатель в своей структуре, либо изменить архитектуру всего этого, чтобы вы могли использовать статические члены или просто функции. - person MiMo; 21.03.2012