我已经编写了一个数组函数来绘制外部的openGL代码而无需在Windows中添加该函数。每次创建新函数时都会使用mainloop。
它可以正常工作,但是当我将它指向另一个类中的公共void函数时,它表示必须调用非静态成员函数'。
代码:
int main(int argc, const char * argv[])
{
Window* win = new Window(800, 600, "3D Game Engine");
Game game;
win->draw[0] = a;
win->draw[1] = game.render;
win->MainLoop();
delete win;
}
绘制功能:
typedef void (*function_ptr)(int);
function_ptr *draw = (function_ptr*)malloc(sizeof(function_ptr));
有办法打电话吗?
由于
答案 0 :(得分:2)
您遇到的问题如下:
void (*function_ptr)(int);
指向具有int
类型参数的函数的指针。
如果你在类这样的方法中有一个方法:
class exampleClass
{
public:
void example(int a);
};
C ++编译器内部生成一个带有隐式this
参数的函数 - 就像这样:
void exampleClass@example(exampleClass *this, int a);
(内部大多数C ++编译器在这些函数的名称中使用@
之类的非法字符 - 但这在这里并不重要。)
因此,您通常无法将类方法分配给此类函数指针。您可以将类型(exampleClass *,int)
的函数分配给类型为(int)
的函数指针。
为避免这种情况,编译器通常不允许您将类方法存储在函数指针中。
“完全”意味着编译器也不允许使用正确内部类型的函数指针:
void (*function_ptr_2)(exampleClass *, int);
exampleClass y;
/* Not supported by the compiler although it is
* theoretically possible: */
function_ptr_2 x1 = exampleClass::example;
function_ptr_2 x2 = y.example;
不幸的是我的C ++知识不够好所以我无法告诉你Angew的解决方案(std::function
)是否以及如何运作。