2012-01-22 3 views
0

Я начинаю с 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

Вы действительно инициализировали 'Game.SpriteManager.Sprites' перед его использованием? –

+0

Точно, что я использую 'Game.GameObjectManager.AddGameObject'. Я даже прокомментировал весь кусок конструктора класса объектов игры, чтобы узнать, что не так, но он просто продолжает давать ошибку. – MahanGM

+0

Да, я не писал их здесь. Все правильно, но этот список - настоящая проблема! – MahanGM

ответ

1

Ваш код использует max_size(), который возвращает системный максимум элементов, которые теоретически можно добавить к вектору вместо size(), который возвращает фактический размер вектора. Код, который вы показываете, вероятно, не является сбой кода, но вместо этого некоторый код в зависимости от этого -> Подкадры, который установлен в ОГРОМНЫЙ номер в последнем фрагменте кода.

В качестве примера, на моей машине;

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

возвращает 4611686018427387903 вместо 0, который вы, вероятно, ожидали.

+0

Спасибо за ответ. Вы правы, я решил это минуту назад, я думал, что max_size() вернет максимальное количество элементов в векторе. – MahanGM

Смежные вопросы