VS2003工程转VS2005工程:
1.cpp文件include的h文件(头文件)必须和CPP文件在同一文件夹中,否则必须include整个路径
Strmiids.lib(strmiids.obj) : error LNK2005: _IID_IMpeg2Data already defined in
VVGraphBuilder.obj
解决方法:
/FORCE:MULTIPLE
关于DEBUG输出(output)的信息不正确的问题:
先删除掉出错的debug配置,然后建立一个新的debug配置并重新设置debug配置的选项。
关于release下不需要添加头文件math.h就可以使用pow,而debug下必须添加才能够使用。
关于系统头文件中名字冲突引起的编译的问题:
先看编译错误提示信息:
FileDialogEx.cpp
d:/installsoftware/vs2005/vc/atlmfc/include/afxpriv.h(261) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
d:/installsoftware/vs2005/vc/atlmfc/include/afxpriv.h(261) : error C2208: 'const int' : no members defined using this type
d:/installsoftware/vs2005/vc/atlmfc/include/afxpriv.h(399) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
d:/installsoftware/vs2005/vc/atlmfc/include/afxpriv.h(399) : error C2208: 'const int' : no members defined using this type
d:/installsoftware/vs2005/vc/atlmfc/include/afxpriv.h(609) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
d:/installsoftware/vs2005/vc/atlmfc/include/afxpriv.h(609) : error C2208: 'const int' : no members defined using this type
这几条错误信息表明:FileDialogEx.cpp文件中包含的头文件afxpriv.h的第261、399和609行处有错误,但afxpriv.h是系统文件怎么会有错误呢?
一般这大部分都是因为与其它文件或系统文件发生名字冲突而导致的。
Dib.cpp
e:/product_code_driver_setup/imnetatv_3019_080306/imnetatv/thumbnail/dib.cpp(510) : error C2039: 'OutputDebugStringA' : is not a member of 'CDib'
e:/product_code_driver_setup/imnetatv_3019_080306/imnetatv/thumbnail/dib.h(35) : see declaration of 'CDib'
e:/product_code_driver_setup/imnetatv_3019_080306/imnetatv/thumbnail/dib.cpp(511) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
e:/product_code_driver_setup/imnetatv_3019_080306/imnetatv/thumbnail/dib.cpp(511) : error C2143: syntax error : missing ';' before '{'
e:/product_code_driver_setup/imnetatv_3019_080306/imnetatv/thumbnail/dib.cpp(511) : error C2447: '{' : missing function header (old-style formal list?)
这几条错误信息表明:Dib.cpp文件的第510和511行的代码有问题。
afxpriv.h文件的第261、399和609行处代码分别为:
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
#ifdef _DEBUG
void AssertValid() const;
void Dump(CDumpContext& dc) const;
#endif
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
Dib.cpp文件的第510和511行的代码为:
#ifdef _DEBUG
void CDib::Dump(CDumpContext& dc) const
{
CObject::Dump(dc);
}
#endif
引起错误的原因:
在工程中有地方包含头文件:dbg.h
//------------------------------------------------------------------------------
// File: Dbg.h
//
// Desc: DirectShow sample code - Helper file for the PSIParser filter.
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------------------------
此头文件是微软为directshow提供的帮助文件,里面有如下定义:
#define Dump(tsz) /
OutputDebugString(tsz);
解决办法:将dbg.h头文件中的宏定义改名,如下:
#define Dump1(tsz) /
OutputDebugString(tsz);
不知道这种宏定义是否在整个工程中都有效,即是否相当于全局变量???
可能和头文件编译顺序有关???
这种错误是很难发现的,