修改原则:
1.系统的文件不能动,要想办法从自己的程序进行修改
2.去掉要转换的项目的只读属性,要不对项目工程文件,会出现无法转换。
1.版本错误
涉及代码:
#if ((_WIN32_WINNT < _WIN32_WINNT_WIN2K) && (_WIN32_IE > _WIN32_IE_IE60SP1)) --条件
#error _WIN32_WINNT settings conflicts with _WIN32_IE setting
#endif
报错提示:
c:\program files\microsoft sdks\windows\v6.0a\include\sdkddkver.h(217) : fatal error C1189:
#error : _WIN32_WINNT settings conflicts with _WIN32_IE setting
#define_WIN32_WINNT 版本:0x0400
#define_WIN32_WINNT_WIN2K 版本:0x0500
#define _WIN32_IE 版本:0x0700
#define _WIN32_IE_IE60SP1 版本:0x0601
把_WIN32_WINNT 版本修改为 0x0500 --这样就可以让条件为假
2.命名空间错误
microsoft visual studio 9.0\vc\include\codeanalysis\sourceannotations.h 文件下,
error C3083: “vc_attributes”:“::”左侧的符号必须是一种类型
“YesNoMaybe”: 不是“`global namespace'”的成员
语法错误 : 缺少“;”(在标识符“SA_YesNoMaybe”的前面)
error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
等等数百个错误,
修改方法:把类似 #include "SCTypes.h" 移动到命名空间外。
3.模板使用更加严格了
错误提示:
c:\program files\microsoft visual studio 9.0\vc\include\functional(143) : error C2784:
“bool std::operator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &)”: 无法从
“const SCDatabaseCache::stObject”为“const std::_Tree<_Traits> &”推导 模板 参数
c:\program files\microsoft visual studio 9.0\vc\include\xtree(1466) : 参见
“std::operator <”的声明
c:\program files\microsoft visual studio 9.0\vc\include\functional(142): 编译类 模板
成员函数“bool std::less<_Ty>::operator ()(const _Ty &,const _Ty &) const”时
with
[
_Ty=SCDatabaseCache::stObject
]
c:\program files\microsoft visual studio 9.0\vc\include\set(48): 参见对正在编译的类
模板 实例化“std::less<_Ty>”的引用
with
[
_Ty=SCDatabaseCache::stObject
]
c:\program files\microsoft visual studio 9.0\vc\include\xtree(22): 参见对正在编译的
类 模板 实例化“std::_Tset_traits<_Kty,_Pr,_Alloc,_Mfl>”的引用
with
[
_Kty=SCDatabaseCache::stObject,
_Pr=std::less<SCDatabaseCache::stObject>,
_Alloc=std::allocator<SCDatabaseCache::stObject>,
_Mfl=false
]
c:\program files\microsoft visual studio 9.0\vc\include\xtree(63): 参见对正在编译的
类 模板 实例化“std::_Tree_nod<_Traits>”的引用
with
[
_Traits=std::_Tset_traits<SCDatabaseCache::stObject,std::less<SCDatabaseCache::stObject>,std
::allocator<SCDatabaseCache::stObject>,false>
]
c:\program files\microsoft visual studio 9.0\vc\include\xtree(89): 参见对正在编译的
类 模板 实例化“std::_Tree_ptr<_Traits>”的引用
with
[
_Traits=std::_Tset_traits<SCDatabaseCache::stObject,std::less<SCDatabaseCache::stObject>,std
::allocator<SCDatabaseCache::stObject>,false>
]
c:\program files\microsoft visual studio 9.0\vc\include\xtree(107): 参见对正在编译的
类 模板 实例化“std::_Tree_val<_Traits>”的引用
with
[
_Traits=std::_Tset_traits<SCDatabaseCache::stObject,std::less<SCDatabaseCache::stObject>,std
::allocator<SCDatabaseCache::stObject>,false>
]
c:\program files\microsoft visual studio 9.0\vc\include\set(57): 参见对正在编译的类
模板 实例化“std::_Tree<_Traits>”的引用
with
[
_Traits=std::_Tset_traits<SCDatabaseCache::stObject,std::less<SCDatabaseCache::stObject>,std
::allocator<SCDatabaseCache::stObject>,false>
]
c:\scprojects\empireserver\servercomponent\scdatabasecache.h(62): 参见对正在编译的类
模板 实例化“std::set<_Kty>”的引用
with
[
_Kty=SCDatabaseCache::stObject
]
说明:
const SCDatabaseCache::stObject, 无法使用 bool std::operator <(const std::_Tree<_Traits>
&,const std::_Tree<_Traits> &) 这个操作符函数
所以要找到 stObject的定义, SCDatabaseCache的实现里一定使用了 stObject定义的对象进行
< 操作符的重载
所以找到操作符重载函数:
bool operator < ( const SCDatabaseCache::stObject& obj1, const SCDatabaseCache::stObject&
obj2 )
{
return obj1.key < obj2.key;
}
修改方案: 对stObject的对象,声明一个操作符重载函数为友元函数。
struct stObject
{
SCKEY key;
void* pData;
friend bool operator < ( const SCDatabaseCache::stObject& obj1, const
SCDatabaseCache::stObject& obj2 );
};