由于实验的需要,要改动OpenCV中混合高斯模型的代码,由于担心重新编译OpenCV项目麻烦,于是自己建立新的源文件,利用它里面的一些源代码,OpenCV混合高斯模型主要在。。。\src\cvaux\vs\bgfg_estimation.cpp以及。。。\src\cvaux\cvbgfg_gaussmix.cpp中实现。将其代码拷贝过来,修改以后编译出现error c2129:静态函数已声明但未定义的错误。。
查看上面两个文件,其实现都是以static函数进行的,由于:“静态函数只能在声明它的文件当中可见,不能被其他文件所调用,也就是说该静态函数只能在其定义的.cpp或.c中调用,在其它.cpp或.c文件的函数里是不能被调用的。”
解决方案: 对静态函数一般函数形式的封装,只需对那些对外提供接口的静态函数进行封装,每一个静态接口函数对应一个封装的一般形式的函数,调用时,调用这些封装函数即可。
////给一个实际的例子
比如:
1. printStatic.h文件如下,
#ifndef
#define
#include <iostream>
using namespace
static void printStatic();
#endif
2. 对应的printStatic.cpp 定义的函数如下
#include "stdafx.h"
#include "printStatic.h"
static void printStatic()
{
}
3. 在主程序中调用这个静态函数
#include "stdafx.h"
#include <iostream>
#include "printStatic.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
printStatic();
return 0;
}