【问题标题】:std::vector::push_back fails to add data to my vectorstd::vector::push_back 无法将数据添加到我的向量
【发布时间】: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 的对象。
  • 我会测试我有多个独立对象的理论。在两个位置打印&amp;gloAreas。如果它们不同,则您有两个对象。如果它们是相同的,那么同时发生了一些事情。
  • @BarrensZeppelin 第一步是创建一个最小的编译示例来演示您的问题。这意味着一个可以编译的完整程序,但不包含您认为与问题无关的内容。

标签: c++ vector


【解决方案1】:

如果gloAreas 被定义为static,它就不是一个true 全局的。它将具有全局范围,但将为每个翻译单元创建一个副本。

对于全局,您需要使用extern 声明它并在单个实现文件中定义它。

免责声明:答案只是猜测,我的水晶球今天可能会关闭......

【讨论】:

  • 很好的猜测。我的水晶球涉及内部范围内的重新声明。
【解决方案2】:

我的水晶球回答:您在内部范围内重新定义了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.
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 2013-10-15
    相关资源
    最近更新 更多