查看: 1395|回复: 4

[急][求助]使用osgParticle库出现C2589的问题

[复制链接]

该用户从未签到

发表于 2011-6-16 17:23:51 | 显示全部楼层 |阅读模式
本人在编写一个使用到osgParticle库的OSG-MFC程序时出现以下错误:
  1. 1>E:\Program Files\OpenSceneGraph\include\osgParticle/RandomRateCounter(56) : error C2589: “(”: “::”右边的非法标记
  2. 1>E:\Program Files\OpenSceneGraph\include\osgParticle/RandomRateCounter(56) : error C2059: 语法错误 : “::”
复制代码



这个程序没有嵌入MFC时并没有出现任何错误,嵌入MFC后就出现上面的错误。我看了原来帖子中一个叫qqzj朋友问过这个问题。我看了一下,我的依赖库没有用到QT,也没有冲突的变量名,希望有人能帮我解答一下,万分感谢

该用户从未签到

 楼主| 发表于 2011-6-16 20:22:14 | 显示全部楼层
问题已经解决啦,把方法写出来供大家参考:
出现这个问题是是函数模板min与Visual C++中的全局的宏min冲突有两种方法可以解决:

第一种办法:设置项目属性,在预定义处理器中添加定义NOMINMAX来禁止使用Vsual C++的min/max宏定义。

                       项目属性   ——> C/C++ ——> 预处理器 ——> 预处理器定义 (此处添加预定义编译开关   NOMINMAX)

但是这个可能会导致出现min max等宏无法识别

第二种办法: 加上括号,与Vsual C++的min/max宏定义区分开

  1. float numNewParticles = (std::min)(static_cast<float>(dt * getRateRange().get_random()), getRateRange().maximum);
复制代码

该用户从未签到

发表于 2011-6-17 09:39:29 | 显示全部楼层
谢谢分享,你vc和osg都什么版本啊

该用户从未签到

 楼主| 发表于 2011-6-17 19:20:47 | 显示全部楼层
VS2008 & osg2.9.9
主要这个问题不算常见,相关的参考也比较少,比较隐蔽的错误,我分享出来希望能对大家有帮助

该用户从未签到

发表于 2011-6-20 12:17:39 | 显示全部楼层
这个问题后来已经被我修正了,用osg::minimum替代了std的麻烦模板
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表