bug总汇

写代码总离不开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文件夹下,实现相对目录存储


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值