Я новичок в 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]
Кто-нибудь знает, почему? Я просто не могу найти решение для этого... Спасибо заранее
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];
listofobjects
Index
, теперь мы можем только догадываться, что происходит