2014-01-21 27 views
0

我是新來的C++,最近我試過如下: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',現在我們只能猜測它在類中的發生了什麼 – stijn

+0

,但我已經在問題中添加了列,列表被填充到類的構造函數中。 – RandomDisplayName

+2

std ::列表沒有運算符[]:http://en.cppreference.com/w/cpp/container/list和http://stackoverflow.com/questions/1112724/why-isnt-there-an-operator-for-a -stdlist - 如果你想索引,你需要例如向量(也不應該是'int',而是'size_t') – stijn

回答

2

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 :) – RandomDisplayName

相關問題