operator=(LONG);报 "error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int"的处理方法
解决办法:
改:
//static g_dwLastRefresh = 0;
static DWORD g_dwLastRefresh = 0; //lspmodify
=================================================
我记得当时的处理方法不是这样,而是直接加入 /wd4430来屏蔽这个错。究竟哪个方法来得好呢?
于是我把相关代码拿出来建了个exe试看看,采用两种方法得到结果是不一样的。
别人的处理方法是对的,加入/wd4430有时是种偷懒的方法。
因为boss强调必须用DShow获取视频帧数据,又一次使用DX9.0b SDK,
directshow是包含在directx SDK里面的。但这是在DirectX 9.0b之前的情况,在9.0c以后,directshow和DirectX就彻底分家了,directshow被移到了windows platform sdk里。如果你只安装了DirectX9.0b之后的版本,是没有directshow的。下载地址看这篇博客吧 http://blog.csdn.net/xxrhuanhuan/article/details/7646695 或者直接下面地址
ftp://ftp.ustb.edu.cn/pub/DirectX/9.0b/SDK/
1. 编译基类源代码
BaseClasses编译生成
路径:<DXSDK>/Samples/C++/DirectShow/BaseClasses
环境:VS2005
为了正确编译,需修改以下文件:
(a) ctlutil.h
D:/DXSDK/Samples/C++/DirectShow/BaseClasses/ctlutil.h
编译时提示错误:
BaseClasses/ctlutil.h(278) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
修改:
//operator=(LONG); //原代码
COARefTime& operator=(LONG);
改完这个之后,出现一堆错误,一个一个来改。
(b) wxdebug.cpp
d:/DXSDK/Samples/C++/DirectShow/BaseClasses/wxdebug.cpp
错误:
1>./wxdebug.cpp(567) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
改:
//static g_dwLastRefresh = 0;
static
DWORD g_dwLastRefresh = 0; //lspmodify
(c) winutil.cpp
d:/DXSDK/Samples/C++/DirectShow/BaseClasses/winutil.cpp
错误:
1>./winutil.cpp(2104) : error C2065: “Count”: 未声明的标识符
改:
//for (UINT Count = 0;Count < Result;Count++)
UINT Count; //lspmodify
for (Count = 0;Count < Result;Count++) { //lspmodify
(d) outputq.cpp
d:/DXSDK/Samples/C++/DirectShow/BaseClasses/outputq.cpp
错误:
1>./outputq.cpp(664) : error C2065: “iDone”: 未声明的标识符
改:
//for (long iDone = 0;
long iDone; //lspmodify
for (iDone = 0; //lspmodify
在DirectShow 8.0的SDK里面就看到有下面的头文件,在我装的是9.0的,没有找到这些文件。所以编译的时候修改完上面的就可以通过了。但要是装8.0的话就要修改了。
2、头文件修改
(a) winnt.h
d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/include/winnt.h
在该文件头部添加:
#define POINTER_64 __ptr64 // add by peter lee
(b) vmr9.h
D:/DXSDK/Include/vmr9.h
MixerPref9_RenderTargetRGB = 0x1000,
MixerPref9_RenderTargetYUV = 0x00002000, //lsp add
error LNK2005: __encode_pointer 已经在 msvcrt.lib(MSVCR90.dll) 中定义
解决办法:打开属性—链接器—输入–忽略特定库–输入libcmt.lib即可解决问题
error LNK2001: 无法解析的外部符号 "void * __cdecl operator new(unsigned int)"
error LNK2001: 无法解析的外部符号 "void __cdecl operator delete(void *)"
解决办法:在项目属性里添加一个附加依赖项:msvcrt.lib。这样再生成项目就不会出现上面的错误了。
http://www.cnblogs.com/bo083/archive/2011/08/26/2155223.html