if(!projectiles.empty()){
sort(projectiles.rbegin(), projectiles.rend()); //Occasionally I get bad sort error. No idea why.
}
投射物是一个充满投射物结构的std :: vector。如果执行“射击”命令,则会在每个帧中添加这些帧;如果超时,则会自动删除每个帧。
在弹丸中:
bool operator < (const projectile& proj) const
{
return (D3DXVec3Dot(&pos, p_camera.GetWorldAhead()) < D3DXVec3Dot(&proj.pos, p_camera.GetWorldAhead()));
}
... pos是D3DXVECTOR3,弹丸在3D空间中的位置-有效(排序用于进行alpha混合时的深度检查)。对于那些想知道的人,D3DXVec3Dot返回一个浮点数。但是偶尔,尤其是在屏幕上有许多弹丸的情况下,它会抛出:
调试断言失败!
程序:C:\ Windows \ system32 \ MSVCP110D.dll文件:
e:\ applications \ vc \ include \ algorithm行:3566
表达式:无效的运算符<
有关程序如何导致断言失败的信息,
请参阅有关断言的Visual C ++文档。
不知道为什么。任何帮助深表感谢。
最佳答案
我知道这不是一个正确的答案,但是发表评论的时间太长了。
错误消息指示比较不一致-sort
函数希望相同的值每次都以相同的方式进行排序。如果它检测到两个相同值的比较给出相反的结果,则将抛出此错误。我怀疑您的比较是错误的,还是内部计算在不同时间给出了不同的结果(例如,弹丸正在移动)。
鉴于您有时只会得到它,因此它表明存在竞争条件或导致不稳定结果的小计算错误。
并确认在排序时,相机或弹丸没有移动-如果在排序过程中有一个或两个都在移动,则将永远无法解决此问题。
关于c++ - 表达式:无效的运算符<-找不到错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17478363/