我有这两段代码搞乱而没有抛出任何错误:
第一部分是来自我想要推入阵列的自定义类。
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对象。
如前所述,我从控制台观察到“通过检查”输出,并且我的矢量大小不会增加编辑:全局。
编辑:错误似乎也是随机的,只发生在调用push_back函数的对象的6个实例中。
我正在为sf :: FloatRect使用SFML,它基本上只是4个浮点数的向量。 getGlobalBounds()是SFML中的另一个函数,它以sf :: FloatRect格式返回精灵的边界矩形。
关于出了什么问题的任何想法?
此致 BarrensZeppelin
编辑2: 由于我自己的无能和std :: multiset的排序混合,错误似乎已经爆发,也许我会在另一个线程中回来^^(带有sscce ofc) 谢谢你们的时间和帮助。
答案 0 :(得分:3)
如果gloAreas
定义为static
,则它不会是 true 全局。它将具有全局范围,但将为每个翻译单元创建一份副本。
对于全局,您需要使用extern
声明它并在单个实现文件中定义它。
免责声明:答案只是一个猜测,我今天的水晶球可能会关闭......
答案 1 :(得分:1)
我的水晶球回答:你已在内部范围内重新定义gloAreas
,如下所示:
vector<idRect> gloAreas; // defines global
void F( vector<idRect> gloAreas ) // defines local instance
{
gloAreas.push_back(); // affects local instance
return; // destroys local instance
}
int main() {
F(gloAreas); // Copies global instance to parameter
// global remains unchanged.
}