几个cegui,ogre编译错误的处理

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则按照某个宏来定义,否则给了一个产量。但是这个宏定义在定义里有又多层嵌套,从而导致上面的变异错误。在没有搞清楚是否因为操作导致宏失效的情况下,直接用常量替换上面的宏定义

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值