【发布时间】:2013-10-19 15:27:39
【问题描述】:
标题非常具有描述性。我在一个结构的向量中存储了一个指向成员函数的非静态指针,该结构在我的类中存储了成员函数指针,我需要类中的一个静态函数来调用该函数。
我可以访问我的静态函数中的类实例,但我似乎仍然无法通过错误消息error C2597: illegal reference to non-static member的指针 b/c 调用成员函数
我现在的语法是(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;
}
指向 Base 的指针存储在传递给WndProc 函数的窗口的 USERDATA 中,因此我可以访问类实例。在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);
【问题讨论】:
-
“不起作用”不足以继续下去。准确。
-
根据定义,没有类实例就不可能访问类成员。因此,您的静态函数需要一个实例。你需要为此努力。在您的情况下,类成员是指向成员函数的指针这一事实无关紧要。
-
现在您已经告诉我们错误消息,看起来您正在尝试从静态函数访问类成员。
vector有可能是会员吗? (无论如何,请发布足够的代码来重现问题;您发布的代码很好,因为object、vector、a、function和parameter的适当定义,所以问题必须在那些的定义中)。 -
你不能这样访问私有成员。
-
这很奇怪,虽然
func_rel是私有的,但我似乎没有遇到问题访问user_data->func_rel.size ()。
标签: c++ function class pointers static