【发布时间】:2012-11-27 20:46:34
【问题描述】:
我有这两段代码在没有抛出任何错误的情况下搞砸了:
第一部分来自我试图推入数组的自定义类。
class idRect {
public:
sf::FloatRect rect;
int id;
idRect(int _id, sf::FloatRect _rect) : id(_id), rect(_rect) {}
};
第二部分是函数被调用的地方。
if((deltaX + deltaY) < 500) { //Taxi distance calculation
cout << endl << "Passed check" << endl;
gloAreas.push_back(idRect(id, entity.getGlobalBounds()));
}
gloAreas 是一个包含 idRect 对象的全局定义向量。
如前所述,我从控制台观察到“通过检查”输出,并且我的向量的大小不会增加 EDIT: global。
编辑:该错误似乎也相当随机,并且仅发生在 6 个调用 push_back 函数的对象实例中的 1 个。
我将 SFML 用于 sf::FloatRect,它基本上只是 4 个浮点数的向量。 getGlobalBounds() 是 SFML 的另一个函数,它以 sf::FloatRect 格式返回精灵的边界矩形。
对出了什么问题有任何想法吗?
真诚地, 贫瘠的齐柏林飞艇
编辑 2: 由于我自己的无能和 std::multiset 的排序之间的混合,错误似乎已经爆发,也许我会在另一个线程中回来 ^^(带有 sscce ofc) 谢谢你们的时间和帮助。
【问题讨论】:
-
你真的能给我们
gloAreas的声明吗?另外,您有idRect的复制构造函数吗? -
是什么让你相信“我的向量的大小没有增加”?我没有看到任何打印语句。尝试在
.push_back()之前和之后打印gloAreas.size()以说服自己.push_back()确实做了一些事情。然后调查这个.push_back()不会引起你期望的任何变化。 -
@BarrensZeppelin - 在 this 段代码中打印它,看看它是否匹配。 Luchian 和我都怀疑您有多个名为
gloAreas的对象。 -
我会测试我有多个独立对象的理论。在两个位置打印
&gloAreas。如果它们不同,则您有两个对象。如果它们是相同的,那么同时发生了一些事情。 -
@BarrensZeppelin 第一步是创建一个最小的编译示例来演示您的问题。这意味着一个可以编译的完整程序,但不包含您认为与问题无关的内容。