在我的一个方法中,传递一个带有两个参数的函数,并保存为rightClick。但是,因为它在静态函数中,编译器希望之前初始化函数。我怎么能这样做?
Mouse.cpp
void Mouse::clicked(int button, int state, int x, int y)
{
if(button == GLUT_LEFT_BUTTON) {
if(state == GLUT_DOWN) {
isDragging = true;
CurrentX = x;
CurrentY = y;
}
else
{
isDragging = false;
}
}
else if (button == GLUT_RIGHT_BUTTON)
{
if (state == GLUT_DOWN)
{
isDragging = true;
rightClick(x,y);
}
}
}
void Mouse::setRightClickFunction(void (*func)(int, int))
{
rightClick = func;
}
在单击之前调用setRightClickFunction。除了现在我遇到了另一个问题:“Mouse :: rightClick”,引自: 鼠标::在Mouse.o中单击(int,int,int,int)
答案 0 :(得分:2)
根据你的评论,你得到一个关于“Mouse::rightClick
的未定义引用的链接器错误。这与函数指针无关。只是每当你在一个类中声明一个静态数据成员时,它就是只需要一个声明。你必须在某处定义它(=在一个.cpp文件中)。
假设您的班级Mouse
看起来像这样:
class Mouse
{
//...
static void (*rightClick)(int, int);
//...
};
你应该把这一行放在Mouse.cpp
:
void (*Mouse::rightClick)(int, int) = 0;
这将作为静态数据成员rightClick
的定义。