c++ - 获取用户定义类的实例

标签 c++ class

我是 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/

相关文章:

c++ - 使用 Char* 查找内存泄漏的原因

c++ - 如何解析文件路径

c++ - MFC 自定义控件背景/文字颜色

c++ - 避免由 new(new[]) 引起的内存泄漏

javascript - 如何将类绑定(bind)到 Vue.js 中的两个以上选项?

c++ - 如何引用其他类的函数来为 vector 添加值

javascript - 使用 module.exports 进行 NodeJS 原型(prototype)设计

python - 如何在 python 中定义一个包含 1000 位数字的十进制类?

c++ - 连接两个 unsigned chars + mallock u_chars

c# - 绘制圆时如何控制圆的大小和位置