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

几个cegui,ogre编译错误的处理1 编译 orge 时的错误 objidl h 11280 error C2061 syntax error identifier RPC out xcount part 解决办法 寻找 rpcsal h 文件 并将其删除 根本原因是在 vc2010 里的 windows7 sdk 包含了这个文件

大家好,我是讯享网,很高兴认识大家。

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  0x0

#endif

#endif

 

上面的意思是如果 NTDDI_VERSION 没有定义过,并且定义过_WIN32_WINNT则按照某个宏来定义,否则给了一个产量。但是这个宏定义在定义里有又多层嵌套,从而导致上面的变异错误。在没有搞清楚是否因为操作导致宏失效的情况下,直接用常量替换上面的宏定义

 

 

小讯
上一篇 2025-02-09 17:03
下一篇 2025-02-25 14:58

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/68421.html