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/

10-10 21:36