代码人生的小狗窝

一行行枯燥的代码,却描绘出人生的点点滴滴

您现在的位置是:首页>_VC/MFC

关于未声明的标识符的简单有关问题,求大神帮助

发布时间:2018-05-27浏览(3004)

    关于未声明的标识符的简单问题,求大神帮助
    之前主要研究的C#,c与openCV都是刚接触,就叫大神给解决个问题
    就是一个注册一个检测鼠标事件的小程序
    错误是:

    简化后的代码如下

    #include <stdlib.h>
    #include <stdio.h>
    #include <cv.h>
    #include <highgui.h> 
    #include <string>
    using namespace std;
     
    int main(int argc,  char *argv[])
    {
      // create a window
      cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE); 
      int mouseParam=5;
      cvSetMouseCallback("mainWin",mouseHandler,&mouseParam);

    }

    void mouseHandler(int eventEnum ,int x,int y,int flags,void *param)
    {
    switch(eventEnum)
    {
    case CV_EVENT_LBUTTONDOWN:
    if(flags&CV_EVENT_FLAG_CTRLKEY)
    printf("Left button down with CTRL pressed\n");
    break;
    case CV_EVENT_LBUTTONUP:
    printf("Left button up\n");
    break;
    }
    }


    mouseHandler的方法就放在下面了,为什么是未声明的,感觉应该很2的问题,求各位大神不要嫌弃
    ------解决思路----------------------
    把mouseHandler这个函数写在main函数之前
    ------解决思路----------------------
    或者这样:

    #include <stdlib.h>
    #include <stdio.h>
    #include <cv.h>
    #include <highgui.h> 
    #include <string>
    using namespace std;

    void mouseHandler(int eventEnum ,int x,int y,int flags,void *param);

    int main(int argc,  char *argv[])
    {
    // create a window
    cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE); 
    int mouseParam=5;
    cvSetMouseCallback("mainWin",mouseHandler,&mouseParam);

    }

    void mouseHandler(int eventEnum ,int x,int y,int flags,void *param)
    {
    switch(eventEnum)
    {
    case CV_EVENT_LBUTTONDOWN:
    if(flags&CV_EVENT_FLAG_CTRLKEY)
    printf("Left button down with CTRL pressed\n");
    break;
    case CV_EVENT_LBUTTONUP:
    printf("Left button up\n");
    break;
    }
    }