我是 C++ 的初学者,现在我的一门课遇到了问题。我有一个 vector 列表 Sprite
类,我想获取列表中的一项并将其提供给另一个类的方法参数,但它只告诉我 Subscript range is out of vector
.我检查了列表,看它是否真的包含任何项目,它是正确的,列表工作得很好。
我的 list :
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;
}
我的 Sprite 构造器:
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);
我检查了代码中的所有内容,但没有超出列表的内容。我认为这是我实现的代码的问题。
谢谢。
最佳答案
您的代码使用 max_size()
返回理论上可以添加到 vector 中的项目的系统最大值,而不是返回实际大小的 size()
vector 。您显示的代码可能不是代码崩溃,而是一些代码取决于 this->Subframes 在您的后一个代码片段中设置为一个巨大的数字。
举个例子,在我的机器上;
std::vector<int> a;
std::cout << a.max_size() << std::endl;
返回 4611686018427387903
而不是您可能期望的 0
。
关于c++ - 获取用户定义类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8960075/