Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;奇怪的函数指针行为_C++_Opengl_Pointers_Sdl - Fatal编程技术网

C++ C++;奇怪的函数指针行为

C++ C++;奇怪的函数指针行为,c++,opengl,pointers,sdl,C++,Opengl,Pointers,Sdl,这是一个简单的opengl/sdl程序。通常有一个巨大的队列,程序在其中保存显示数据,例如一个三角形将像这样插入/读取队列中(GL_Begin…Vertice 1…Vertice 2…Vertice 3…GL_End) 项结构 enum Shapes{ LINE, POLYGON, TRIANGLE }; struct Item{ int id; int type; Shapes shape; double x; double y

这是一个简单的opengl/sdl程序。通常有一个巨大的队列,程序在其中保存显示数据,例如一个三角形将像这样插入/读取队列中(GL_Begin…Vertice 1…Vertice 2…Vertice 3…GL_End)

项结构

enum Shapes{
    LINE,
    POLYGON,
    TRIANGLE
};

struct Item{
    int id;
    int type;
    Shapes shape;
    double x;
    double y;
    double z;
};

^很好用

但是

为了进一步简化事情:

Case SDL_MOUSEMOTION: ...... code ..... CC2D( params) ........
很好,但是

Event(){ CC2D( params ) } // Main.cpp
Case SDL_MOUSEMOTION: ...... code ..... (*Event)() ........ // GEngine.cpp

无法按预期工作

您正在
PollEvents
中声明局部变量:

int mouse_xpre = 0;
int mouse_ypre = 0;
请注意,它们被命名为
mouse\u xpre
mouse\u ypre
。然后在回调中,您正在执行

gEngine.CC2D(0,(gEngine.mouse_x-gEngine.mouse_xpre),(gEngine.mouse_y-gEngine.mouse_ypre));
//                                      ^^^^^^^^^^                           ^^^^^^^^^^

它访问成员变量。您需要删除局部变量的声明,以便它们不会隐藏成员变量,并且您将在这两个位置使用成员变量。

您在
PollEvents
中声明局部变量:

int mouse_xpre = 0;
int mouse_ypre = 0;
请注意,它们被命名为
mouse\u xpre
mouse\u ypre
。然后在回调中,您正在执行

gEngine.CC2D(0,(gEngine.mouse_x-gEngine.mouse_xpre),(gEngine.mouse_y-gEngine.mouse_ypre));
//                                      ^^^^^^^^^^                           ^^^^^^^^^^

它访问成员变量。您需要删除局部变量的声明,以便它们不会隐藏成员变量,并且您将在这两个位置使用成员变量。

…*文字墙*。。。。。。而不是用鼠标移动项目,而是将其从屏幕上移开。:)“(*事件)(;”)是什么,它只是像“…”这样的伪代码,还是语法错误?请记住,一些CCCompiler允许在不生成异常的情况下执行一些werid操作;-)是的,对不起,错过了@umlcat否,这是通过函数指针调用函数的有效语法……*文字墙*。。。。。。而不是用鼠标移动项目,而是将其从屏幕上移开。:)“(*事件)(;”)是什么,它只是像“…”这样的伪代码,还是语法错误?请记住,一些CCCompiler允许在不生成异常的情况下执行一些werid操作;-)是的,对不起,错过了@umlcat不,这是通过函数指针调用函数的有效语法。谢谢!这是不使用构造函数的代价。出于某种奇怪的原因,我决定在类中已经定义的整数之前添加一个int。谢谢!这是不使用构造函数的代价。出于某种奇怪的原因,我决定在类中已经定义的整数之前添加一个int。
int mouse_xpre = 0;
int mouse_ypre = 0;
gEngine.CC2D(0,(gEngine.mouse_x-gEngine.mouse_xpre),(gEngine.mouse_y-gEngine.mouse_ypre));
//                                      ^^^^^^^^^^                           ^^^^^^^^^^