Название довольно наглядное. Я сохранил нестатический указатель на функцию-член в векторе структуры, в которой хранятся указатели на функции-члены в моем классе, и мне нужна статическая функция в классе для вызова этой функции.Вызов функции функции указателя в статической функции
У меня есть доступ к экземпляру класса в моей статической функции, но я до сих пор не могу вызвать функцию члена через указатель б/с сообщения об ошибке error C2597: illegal reference to non-static member
Синтаксис У меня сейчас (object->*(vector[a].function)) (parameter)
, Упрощенный код ниже:
class Base
{
private:
struct FunctionRelation
{
UINT message;
LRESULT (Base::*function) (HWND, WPARAM, LPARAM);
};
static LRESULT CALLBACK WndProc (HWND window, UINT msg, WPARAM wparam, LPARAM lparam);
std::vector<FunctionRelation> func_rel;
}
Указатель базы хранится в USERDATA окна, переданного в функцию WndProc
, и, таким образом, у меня есть доступ к экземпляру класса. В WndProc
у меня есть:
Base *user_data = reinterpret_cast<Base *>(GetWindowLongPtr (window, GWLP_USERDATA));
//Loop through our function relations and call those functions. Else, just return DefWindowProc.
if (user_data != NULL) //If it is not directly after we created a window.
for (int a = 0;a < static_cast<int>(user_data->func_rel.size());a++)
if (user_data->func_rel[a].message == msg)
return (user_data->*(func_rel[a].function)) (window, wparam, lparam);
return DefWindowProc (window, msg, wparam, lparam);
«Не работает», недостаточно для продолжения. Будьте точны. –
По определению невозможно получить доступ к элементу класса без экземпляра класса. Поэтому вашей статической функции нужен экземпляр. Тебе нужно работать над этим. Тот факт, что в вашем случае член класса является указателем на функцию-член, не имеет значения. – john
Теперь вы сказали нам сообщение об ошибке, похоже, что вы пытаетесь получить доступ к члену класса из статической функции. Возможно ли, что 'vector' является членом? (В любом случае, пожалуйста, разместите достаточно кода, чтобы воспроизвести проблему, код, который вы опубликовали, отлично подходит для соответствующих определений 'object',' vector', 'a',' function' и 'parameter', поэтому проблема должна быть в определениях этих). –