今天在调用setMouseCallback()时遇到一个问题,回调函数mouse_callback()定义的是一个静态函数。后来在*.cpp中实现,在main.cpp中调用报“error c2129:静态函数已声明但未定义”的错误。
function.h
#ifndef STATIC_TEST
#define STATIC_TEST
#include <iostream>
using namespace std;
static void staticfunc();
#endif
function.cpp
#include "function.h"
static void staticfunc()
{
cout << "static function" << endl;
}
main.cpp
#include <iostream>
#include "function.h"
using namespace std;
int main()
{
staticfunc();
return 0;
}
原因:“静态函数只能在声明它的文件当中可见,不能被其他文件所调用,也就是说该静态函数只能在其定义的.cpp或.c中调用,在其它.cpp或.c文件的函数里是不能被调用的。”
解决办法: 再写一个参数列表相同的一般函数,然后在一般函数中调用静态函数。每次要调用静态函数时就调用一般函数。相当于间接调用静态函数。
function.h
#ifndef STATIC_TEST
#define STATIC_TEST
#include <iostream>
using namespace std;
static void staticfunc();
void func();
#endif
#endif
function.cpp
#include "function.h"
void func()
{
staticfunc();
}
static void staticfunc()
{
cout << "static function" << endl;
}
main.cpp
#include <iostream>
#include "function.h"
using namespace std;
int main()
{
//staticfunc();
func();
return 0;
}