std :: vector :: push_back无法将数据添加到我的向量中

时间:2012-11-27 20:46:34

标签: c++ vector

我有这两段代码搞乱而没有抛出任何错误:

第一部分是来自我想要推入阵列的自定义类。

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) 谢谢你们的时间和帮助。

2 个答案:

答案 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.
}