【问题标题】:Why is the push_back method of vector not working?为什么vector的push_back方法不起作用?
【发布时间】:2015-07-17 03:02:08
【问题描述】:

我想在向量中放入一些元素。 到目前为止,我一直使用这种在向量中插入元素的方式,并且一直有效。我不知道为什么它今天不工作。

World::World()
{
    collisionmap.loadFromFile("collisionmap.png");
    for(int i=0; i<collisionmap.getSize().y; i++)
    {
        for(int j=0; j<collisionmap.getSize().x; j++)
        {
            if(collisionmap.getPixel(j,i)==sf::Color(0,0,0))
            {
                  cout<<"test"<<endl //prints perfectly
                  collisionList.push_back(sf::FloatRect(j*32, i*32, 32, 32));
            }
        }
    }
    cout<<collisionList.size(); //shows nothing
}

编辑:

我忘了说:-

1.我正在使用 SFML。

2.collisionList是向量。

3.这段代码编译没有任何问题。

4.collisionmap的大小不为零,因为collisionmap.getSize()返回准确的值。

【问题讨论】:

  • 无法编译或运行的代码很难调试:ideone.com/S5p9EH
  • 您确实应该提到您正在使用 SFML。
  • 什么是collisionList?这些尺寸是多少?也许调试器可能会有所帮助
  • 您的问题描述“今天不工作”没有帮助。是否编译。它会崩溃吗?发生什么了?你能指望什么? “什么都没有”是什么意思?
  • 所以使用调试器。猜大小是零。因此加载文件时出现问题(错误的文件名/目录)

标签: c++ c++11 vector sfml


【解决方案1】:
cout<<collisionList.size(); //shows nothing

当然。这只是将东西放入缓冲区,它实际上并没有输出任何东西。试试:

cout<<collisionList.size()<<endl;

【讨论】:

  • 成功了。所以向量实际上并不是空的。但是为什么之前不打印呢?
  • 你没有代码让它打印。您只是在缓冲区中放了一些东西,然后从不刷新缓冲区以输出。计算机完全按照您的指示去做。
  • 所以将 endl 放在 cout 的末尾会刷新缓冲区?
  • (如果问题是向量为空,它不会有输出0吗?)
  • @DavidSchwartz 好吧,我不完全知道这个问题是关于什么的,但是 endl 怎么能使它工作呢? 90% 的时间我只使用cout &lt;&lt; "something" 这是否意味着编译器正在为我刷新缓冲区?它可能随时失败,就像这里一样?
猜你喜欢
  • 2014-05-27
  • 2018-11-26
  • 2021-07-09
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 2013-08-18
  • 2013-01-22
相关资源
最近更新 更多