我是C ++的初学者,现在我的一个课程出了问题。我有一个我的Sprite
类的向量列表,我希望获得列表中的一个项目,并将其提供给另一个类的方法参数,但它只是告诉我Subscript range is out of vector
。我查看了列表,看它是否真的包含任何项目,这是正确的,列表工作得很好。
我的清单:
vector<Core::Graphic::cSprite> Sprites;
我的方法:
Core::Logic::cGameObject::cGameObject(std::string Name, Core::Graphic::cSprite* Sprite, float X, float Y, int Depth)
{
// Set fields
this->Name = Name;
this->Sprite = *Sprite;
// Add to active sprites
for(int i = 0; i < this->Sprite.Images.size(); i++)
{
// Create temporaroy sprite
sf::Sprite tempSprite;
tempSprite.SetImage(this->Sprite.Images[i]);
this->ActiveSprite.push_back(tempSprite);
}
this->X = X;
this->Y = Y;
this->Depth = Depth;
this->ImageIndex = 0;
this->ImageNumber = this->Sprite.SubFrames;
}
我的精灵构造函数:
Core::Graphic::cSprite::cSprite(std::string Name, vector<std::string> ImagesFileNames)
{
// Check input
if(Name != "" && ImagesFileNames.max_size() > 0)
{
this->Name = Name;
for(int i = 0; i < ImagesFileNames.size(); i++)
{
sf::Image tempImage;
if(tempImage.LoadFromFile(ImagesFileNames[i])){
this->Images.push_back(tempImage);
}
}
this->SubFrames = this->Images.max_size();
}
}
我有一个cGameObjectManaher
类来管理游戏对象,它有一个如下方法:
Game.GameObjectManager.AddGameObject("obj_intro_1", &Game.SpriteManager.Sprites[0], 0, 0, 0);
我检查了我的代码中的所有内容,但没有超出列表。我认为这是我实施的代码问题。
感谢。
答案 0 :(得分:1)
您的代码正在使用max_size()
,它返回理论上可以添加到向量的系统最大值,而不是size()
,它返回向量的实际大小。你展示的代码可能不是代码崩溃,而是一些代码依赖于这个 - &gt;子框架在后面的代码片段中设置为一个巨大的数字。
例如,在我的机器上;
std::vector<int> a;
std::cout << a.max_size() << std::endl;
返回4611686018427387903
而不是0
,这可能是你期待的。