获取用户定义类的实例 我是一个C++初学者,现在我的一个类有问题。我有一个我的Sprite类的向量列表,我想获取列表中的一个项,并将其提供给另一个类的方法参数,但它只告诉我下标范围超出了向量范围。我检查了一下列表,看看它是否真的包含任何项目,它是正确的,列表工作得很好

获取用户定义类的实例 我是一个C++初学者,现在我的一个类有问题。我有一个我的Sprite类的向量列表,我想获取列表中的一个项,并将其提供给另一个类的方法参数,但它只告诉我下标范围超出了向量范围。我检查了一下列表,看看它是否真的包含任何项目,它是正确的,列表工作得很好,c++,class,C++,Class,我的名单: 矢量精灵 我的方法: 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(i

我的名单:

矢量精灵

我的方法:

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;
}
我检查了代码中的所有内容,但没有任何内容超出列表。我认为这是我实现的代码的问题


谢谢。

您的代码使用的是
max\u size()
,它返回理论上可以添加到向量的系统最大项,而不是
size()
,它返回向量的实际大小。您显示的代码可能不是代码崩溃,而是一些依赖于->子框架的代码,这些子框架在后面的代码段中设置为一个巨大的数字

例如,在我的机器上

std::vector<int> a;
std::cout << a.max_size() << std::endl;
std::向量a;

std::您确定在使用它之前已初始化了
Game.SpriteManager.Sprites
?这正是我使用的
Game.GameObjectManager.AddGameObject
行。我甚至对我的游戏对象类构造器的整个主体进行了注释,以查看出了什么问题,但它只是不断地给出错误。是的,我没有在这里编写它们。一切都是对的,但是这个列表是一个真正的问题!您得到的错误表明向量的大小小于或等于您试图访问的元素(在您的案例中为0)的索引。这意味着向量有0个元素。请重新检查您是否正确初始化了它的元素,即使用vector类的接口(很可能是push_back)。在后一段代码中,我不确定您是否真的想使用max_size(),我认为它没有按照您认为的那样做(查找)。我的猜测是,您正在使用子帧(或循环到子帧)作为您正在显示的代码之外的某个地方的索引,这就是问题所在。谢谢您的回答。你说得对,我一分钟前就解决了,我想max_size()会返回向量中的最大项数。
Game.GameObjectManager.AddGameObject("obj_intro_1", &Game.SpriteManager.Sprites[0], 0, 0, 0);
std::vector<int> a;
std::cout << a.max_size() << std::endl;