C++ 迭代 vector 返回甚至不在 vector 中的对象

标签 c++ vector iterator

我正在组装一个弹球 table ,这里有一个 PinballTable 类。我想将所有游戏对象(弹球、保险杠、脚蹼等)保存在一个 vector 中,我将其称为 _gameObjs。

当我迭代 vector 时,它返回构造函数中声明的最后一个 GameObj,无论该 GameObj 是否在 vector 中。如果我向 vector 添加多个 GameObj,它将多次返回最后声明的 GameObj。我正在从 C# 过渡,集合似乎让我发挥了最大作用,但我完全被难住了

在这里,我添加了三个对象:两个保险杠和一个弹球。在更新函数中,我试图让它输出每个对象的 x 大小,这样我就知道它正在正确迭代。例如,在这里,我什至没有将弹球添加到 vector 中,但它在每次更新调用时输出弹球的 x 大小两次。

#include "PinballTable.h"

GameObj* _pinball;
int TABLE_WIDTH;
int TABLE_HEIGHT;

float _tableTiltedAngle     = 6.5f;
float _radiansPerDegree     = PI / 180;
float _gravityForce         = cos( _tableTiltedAngle * _radiansPerDegree ) * GRAVITY;

vector<GameObj> _gameObjs;


PinballTable::PinballTable( const int width, const int height )
{
    TABLE_WIDTH     = width;
    TABLE_HEIGHT    = height;


    GameObj bumper1(
        GameObj::shapeCircle,
        GameObj::typeStatic,
        color4f( 1.0f, 1.0f, 0.0f, 1.0f),
        point2f( 300.0f, 600.0f ),
        vec2f( 40.0f, 0.0f )
        );
    _gameObjs.push_back( bumper1 );


    GameObj bumper2(
        GameObj::shapeCircle,
        GameObj::typeStatic,
        color4f( 1.0f, 1.0f, 0.0f, 1.0f),
        point2f( 50.0f, 200.0f ),
        vec2f( 50.0f, 0.0f )
        );
    _gameObjs.push_back( bumper2 );


    GameObj pinball( 
        GameObj::shapeCircle,
        GameObj::typeDynamic, 
        color4f( 1.0f, 1.0f, 0.0f, 1.0f), 
        point2f( 100.0f, 100.0f), 
        vec2f( 20.0f, 20.0f) 
        );


    _pinball = &pinball;
}


PinballTable::~PinballTable(void)
{
}





// ------------------------------ Update Functions ------------------------------
void PinballTable::update( GameTime& gameTimer )
{
    for( vector<GameObj>::iterator i = _gameObjs.begin(); i != _gameObjs.end(); ++i )
    {
        cout << i->getSize()->x << endl;
    }
}

感谢您的帮助

获取大小函数仅从 GameObj 返回一个 vector 2(x,y 分量)。每次输出大小都与 PinballTable 构造函数中最后声明的 GameObj 大小匹配

vec2f* GameObj::getSize( void )
{
    return &_size;
}

已解决:

正如一些人指出的,问题之一是 GameObjs 是在构造函数内创建的。

在 GameObj 类中,我没有在头文件中声明不同的成员。将这些成员切换到头文件似乎可以解决此问题,但我不知道原因。

最佳答案

您在构造函数内创建了 3 个 GameObj,它们将在构造函数返回后被销毁,当您将它们添加到 vector 时,它们是垃圾。

关于C++ 迭代 vector 返回甚至不在 vector 中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20415820/

相关文章:

c++ - 为什么我不能使用迭代器将 unique_ptr 从集合 move 到函数参数?

c++ - 如何使用 C++ 流优雅地读取整数?

c++在派生中定义模板化基类在IAR ARM编译器中不起作用

c++ - 如何从数组类中删除元素

c++ - 初始化具有大小的对象 vector 时出错

Python Numpy 二维数组迭代

c++ - 我如何编写一个迭代器包装器来组合来自底层迭代器的顺序值组?

c++ - 如何显式调用命名空间限定的析构函数?

c++ - 将一个对象、它的调用方法和调用它的参数打包到一个对象中,以便以后调用它

python - pygame 敌人朝向玩家的二维运动,如何计算 x 和 y 速度?