C++ C++;静态函数变量
在我的一个方法中,传递一个带有两个参数的函数,并保存为rightClick。但是,由于它位于静态函数中,编译器希望函数在初始化之前进行初始化。我该怎么办 Mouse.cppC++ C++;静态函数变量,c++,static-methods,C++,Static Methods,在我的一个方法中,传递一个带有两个参数的函数,并保存为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;
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::clicked(int,int,int,int)在Mouse.o根据您的评论,您得到一个链接器错误,关于“未定义对
Mouse::rightClick的引用”。这与函数指针无关。只是每当您在类中声明静态数据成员时,它只是一个声明。您必须在某个地方定义它(=正好在一个.cpp文件中)
假设您的类鼠标看起来像这样:
class Mouse
{
//...
static void (*rightClick)(int, int);
//...
};
你应该把这一行放在鼠标的某个地方
void (*Mouse::rightClick)(int, int) = 0;
这将作为静态数据成员的定义rightClick
您的意思是setRightClickFunction
是静态的吗?如果是,原因是什么?如果不是,编译器希望初始化什么函数?传递有效函数(全局、命名空间中或静态成员函数)作为setRightClickFunction
函数的参数,在调用clicked
处理程序之前。您可能还想了解和。您能提供确切的编译器错误吗?@typedef会简化问题。如果Angew愿意,我会让他写下答案,他也会告诉您同样的事情。