VS2003工程转VS2005工程遇到的一些问题

在将VS2003工程转换为VS2005过程中,遇到了包括头文件路径、调试输出错误、系统头文件冲突、宏定义冲突以及链接错误等问题。解决方法包括指定编译选项/FORCE:MULTIPLE来解决重复定义问题,删除并重新配置DEBUG配置,以及检查和修改宏定义冲突。对于链接错误,需要检查成员函数的声明和实现是否一致,以及运行时库设置是否匹配。在处理这类问题时,对编译错误提示的准确理解至关重要。
摘要由CSDN通过智能技术生成

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);

不知道这种宏定义是否在整个工程中都有效,即是否相当于全局变量???
可能和头文件编译顺序有关???

这种错误是很难发现的,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值