1. 编译orge时的错误
objidl.h(11280): error C2061: syntax error : identifier '__RPC__out_xcount_part'
解决办法:寻找rpcsal.h 文件,并将其删除。
根本原因是在vc2010里的windows7 sdk 包含了这个文件,并且里面的定义有所不同。解决掉这个重复编译问题就行,在vc2008应该不会存在这个问题
2.CEGUI时的初始化编译错误
error C2440: “初始化”: 无法从“int”转换为“CEGUI::ListboxItem*” C:\Program Files\MicrosoftVisual Studio 10.0\VC\include\xmemory 208 1 CEGUIBase
搜索到的解决思路
http://www.cegui.org.uk/phpBB2/viewtopic.php?f=10&t=4211&p=19374&hilit=error+C2440#p19374
解决办法:打开CEGUIMultiColumnList.cpp文件,并查看 702行,或者用“d_grid[i].d_items.insert(d_grid[i].d_items.begin() +position,”进行搜索,并将NULL替换为 nullptr。
3. 编译CEGUIOgreRenderer 时的错误
error C2440: “初始化”: 无法从“constCEGUI::OgreCEGUIRenderer::QuadInfo *”转换为“CEGUI::OgreCEGUIRenderer::QuadInfo*”
原因是,方法需要传入的是一般的对象指针,而实际上可能会传入一个产量指针,会导致一个预期错误
多方查询后无果,对在这下方的第二天消息做处理
error C2439:“std::_Pair_base<_Ty1,_Ty2>::second”
问google后,得知是原因大部分是std库升级后,不能再使用NULL表示空指针,而必须用nullptr 。结合上面的错误,找到和QuadInfo* 相关的std类型,并在OgreCEGUIRenderer.cpp的172行,把一个插入数据的方法做改造,传入了产量参数:
之前的是:
4. CEGUISystem 报没有找到 lua 对象的错误
error C2065: “LuaStack”: 未声明的标识符
error C2065: “LuaObject”: 未声明的标识符
看提示应该是 lua 的头文件没有包含进去,但实际情况是已经包含。多方尝试,最终仅仅是因为没有定义命名空间而导致找不到对应类型。为啥之前的vc2008不报这样的错⊙﹏⊙b汗。
5. WXCore 的错误
error C2440: “初始化”: 无法从“int”转换为“WX::UnsolvedMaterialTexture*”
标准的std更新后的经典错误,修改地方:的第178行,和问题2一样。
error C2440: “初始化”: 无法从“int”转换为“WX::`anonymous-namespace'::UnsolvedSceneItem*”
改错的方式一样在文件的166行
error C2440: “<function-style-cast>”: 无法从“int”转换为“std::_Tree_iterator<_Mytree>”
这个,也是std的问题,代码主要在:AnimationSkeletonLinks::iterator(0)
原因吗,估计是构造函数以前支持int数量的初始化,而现在不支持,把0去掉即可
6.编译 WXRender 的错误
error C1012: 不匹配的括号 : 缺少“)” C:\Program Files\MicrosoftSDKs\Windows\v7.0A\include\sdkddkver.h 246
错误的地方时一个宏定义:
#ifndef NTDDI_VERSION
#ifdef _WIN32_WINNT
// setNTDDI_VERSION based on _WIN32_WINNT
#define NTDDI_VERSION NTDDI_VERSION_FROM_WIN32_WINNT(_WIN32_WINNT)
#else
#define NTDDI_VERSION 0x06010000
#endif
#endif
上面的意思是如果 NTDDI_VERSION 没有定义过,并且定义过_WIN32_WINNT则按照某个宏来定义,否则给了一个产量。但是这个宏定义在定义里有又多层嵌套,从而导致上面的变异错误。在没有搞清楚是否因为操作导致宏失效的情况下,直接用常量替换上面的宏定义