C ++静态函数变量

时间:2013-09-16 12:02:58

标签: 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;
            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)

1 个答案:

答案 0 :(得分:2)

根据你的评论,你得到一个关于“Mouse::rightClick的未定义引用的链接器错误。这与函数指针无关。只是每当你在一个类中声明一个静态数据成员时,它就是只需要一个声明。你必须在某处定义它(=在一个.cpp文件中)。

假设您的班级Mouse看起来像这样:

class Mouse
{
  //...
  static void (*rightClick)(int, int);
  //...
};

你应该把这一行放在Mouse.cpp

的某个地方
void (*Mouse::rightClick)(int, int) = 0;

这将作为静态数据成员rightClick的定义。