修改原则: 
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 );
 };