C++ C++;静态函数变量

C++ 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;

在我的一个方法中,传递一个带有两个参数的函数,并保存为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::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愿意,我会让他写下答案,他也会告诉您同样的事情。