c ++: получение объекта из списка по индексу не работает? [Дубликат]

0

Я новичок в c++, и недавно я попробовал следующее:

list<Someclass> listofobjects;
int Index;
cin >> Index;
Someclass anobject = listofobjects[Index];

В качестве вывода я получаю следующую ошибку:

../src/Kasse.h:98:71: error: no match for ‘operator[] in ‘((Someclass*)this)->Someclass::listofobjects[((Someclass*)this)->Someclass::Index]

Кто-нибудь знает, почему? Я просто не могу найти решение для этого... Спасибо заранее

  • 0
    показать код, объявляющий listofobjects Index , теперь мы можем только догадываться, что происходит
  • 0
    это в классе, но я добавил столбцы в вопросе, список заполняется в конструкторе класса ...
Показать ещё 3 комментария
Теги:
class
object
list
oop

1 ответ

2
Лучший ответ

std::list - это std::list с двойной связью - он позволяет вам перебирать его с самого начала или конца, но не позволяет произвольный доступ к определенному индексу.

Если вы этого хотите, возможно, вам нужен контейнер с произвольным доступом, такой как std::vector, динамический массив. Вам нужно убедиться, что он достаточно большой, чтобы содержать нужный вам индекс:

if (Index >= listofobjects.size()) {
    listofobjects.resize(Index+1);
}

и вам, вероятно, нужна ссылка на объект в списке, а не на копию, если вы хотите его изменить:

Someclass & anobject = listofobjects[Index];

Кроме того, если вы хотите, чтобы разреженный массив содержал только объекты для используемых вами индексов, вы можете использовать ассоциативную карту:

std::map<int, Someclass> objects;
Someclass & anobject = objects[Index];
  • 0
    спасибо за ваш ответ, я сейчас использую std :: vector :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню