gpt4 book ai didi

c++遍历 vector 返回甚至不在其中的对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:47:19 25 4
gpt4 key购买 nike

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

当我遍历 vector 时,它返回构造函数中声明的最后一个 GameObj,无论该 GameObj 是否在 vector 中。如果我将多个 GameObjs 添加到 vector 中,它将多次返回最后声明的 GameObj。我正在从 C# 过渡,集合似乎正在发挥我的优势,不过我在这里完全被难住了

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

感谢帮助

get size 函数只是从 GameObj 返回一个 vector2(x,y 分量)。输出大小每次都与 PinballTable 构造函数中最后声明的 GameObj 大小匹配

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

已解决:

正如一些人所指出的,其中一个问题是 GameObjs 是在构造函数中创建的。

在 GameObj 类中,我没有在头文件中声明不同的成员。将这些成员切换到头文件似乎解决了这个问题,我不知道是什么原因。

最佳答案

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com