0

在我的一种方法中,传递了一个带有两个参数的函数,并保存为 rightClick。但是,因为它在一个静态函数中,编译器希望该函数之前被初始化。我该怎么办?

鼠标.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 中的 Mouse::clicked(int, int, int, int)

4

1 回答 1

2

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

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

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

你应该把这条线放在某处Mouse.cpp

void (*Mouse::rightClick)(int, int) = 0;

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

于 2013-09-16T12:29:13.827 回答