写代码总离不开bug,为了防止犯同样的错误,将所有的bug和修改方法集于此,以备日后参考:
1:#error This file requires _WIN32_WINNT to be #defined at least to 0x0403. Value 0x0501 or higher is recommended. //被认为无法在当前系统下编译
修改:打开stdafx.h文件,修改为以下数据
#ifndef WINVER // Allow use of features specific to Windows 95 and Windows NT 4 or later.
#define WINVER 0x0501 // Change this to the appropriate value to target Windows 98 and Windows 2000 or later.
#endif
#ifndef _WIN32_WINNT // Allow use of features specific to Windows NT 4 or later.
#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target Windows 98 and Windows 2000 or later.
#endif
#ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later.
#define _WIN32_WINDOWS 0x0501 // Change this to the appropriate value to target Windows Me or later.
#endif
#ifndef _WIN32_IE // Allow use of features specific to IE 4.0 or later.
#define _WIN32_IE 0x0601 // Change this to the appropriate value to target IE 5.0 or later.
#endif
2:在使用json就版本是使用的是asFloat(),新版本已经没有了,直接用asDouble(),改过来就OK
3:\flann\logger.h(66): error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> C:\Program Files\Microsoft Visual Studio 11.0\VC\include\stdio.h(218) : 参见“fopen”的声明
使用vs2012配置opencv编译出现问题:
1>------ 已启动生成: 项目: Win32ForOpenCV245, 配置: Debug Win32 ------
1> stdafx.cpp
1> Win32ForOpenCV245.cpp
1>f:\softs\opencv245\opencv\build\include\opencv2\flann\logger.h(66): error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\stdio.h(218) : 参见“fopen”的声明
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
解决办法它也写的很清楚,这里截图给大家看
ok,也就是加入一个_CRT_SECURE_NO_WARNINGS的问题。
这个问题只有在Visual Studio 2012中才会有,2010中只是一个warning。
这个问题不管在OpenCV2.4.4还是OpenCV2.4.5都有,其它版本可能也有。
4、配置directshow
由于早期很多程序用directshow写的,又由于directshow的变迁,搞得好多人在配置directshow时要弄好久,有时候下载的directX没有directshow,http://download.csdn.net/detail/swping/7195159 这里可以下载。
下载后,添加了路径之后可能会出现
1>C:\DXSDK\Samples\C++\DirectShow\BaseClasses\ctlutil.h(278): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
错误指向:operator=(LONG);,改成LONG operator=(LONG);就没有错误了
5、 error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) 已经在 LIBCMTD.lib(new.obj) 中定义
error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) 已经在 LIBCMTD.lib(dbgdel.obj) 中定义
error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) 已经在 LIBCMTD.lib(new2.obj) 中定义
error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPAX@Z) 已经在 LIBCMTD.lib(delete2.obj) 中定义
如果MFC在release版本下,出现以上4个错误,可以将在“静态库中使用 MFC”改成“在共享 DLL 中使用 MFC”,顺便将“多线程调试 (/MTd)”改成“多线程 DLL (/MD)”(后者如果没有改会提示的),然后就木有错误提示了。先用着吧,后有问题再说
6、关于WritePrivateProfileString不能写入ini文件中的问题
WritePrivateProfileString(_T("aa"),_T("bb"),ccstr,_T("Set.ini")); //此时不能写入set.ini文件,需要改动最后一个参数。如:
WritePrivateProfileString(_T("aa"),_T("bb"),ccstr,_T("\\Set.ini")); //此时,写入根目录,例如,在D盘建立的工程,将在D盘根目录下建立Set.ini
所以为了使Set.ini生成在固定的地方,需要使用绝对路径,但是这样一来,在移植的时候可能会出现一些路径问题...这个时候怎么办
可以在程序所在目录新建一个文件夹,然后存放在此,在程序目录下新建Set文件夹,
WritePrivateProfileString(_T("aa"),_T("bb"),ccstr,_T("set\\Set.ini")); //此时Set.ini将在set文件夹下,实现相对目录存储