2017-12-27 811 views
-1

當前試圖使用土壤庫創建天空盒。但是,我得到這兩個錯誤,不知道爲什麼或如何解決它們...如果有人可以提供任何幫助或建議,將不勝感激!C++錯誤代碼E0349,C2676

GLuint textureCon; 

int widthX, heightY; 
unsigned char* imageInfo; 

std::list<int> faces; 
faces.push_back(6); 

glBindTexture(GL_TEXTURE_CUBE_MAP, textureCon); 

for (GLuint i = 0; i < faces.size(); i++) 
{ 
    imageInfo = SOIL_load_image(faces[i], &widthX, &heightY, 0, SOIL_LOAD_RGB); 
    glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB, widthX, heightY, 0, GL_RGB, GL_UNSIGNED_BYTE, imageInfo); 
} 

Error message

如果我說faces[i]這正是發生E0349錯誤說,方括號不匹配操作?但我認爲這是如何使用列表? 再次感謝您的幫助!

+0

請發佈完整的錯誤消息,不只是編譯器的代碼數字。 –

+3

無論如何,你只是沒有閱讀'std :: list'的文檔。它不是一個隨機訪問容器,所以'operator []'沒有意義,因此不存在。見例如http://en.cppreference.com/w/cpp/container/list找不到'operator []'。你可能實際上需要'std :: vector',99.9999%的人需要一個容器,而它*是一個帶有'operator []'的隨機訪問容器。 (您可以使用迭代器和「advance」或算術或其他東西,在'std :: list'中的特定名義'索引'處獲得該項目,但您可能並不真的想要這樣做。) –

+1

請提供錯誤消息爲文字(可搜索)而不是png(不可搜索)。謝謝 –

回答

1

我想你在這裏誤解了一些東西。

1)push_back只將一個元素推入一個容器,例如:push_back(6)會將6推入容器,而不是6個元素。

2)std :: list do not沒有定義[]運算符,它不是爲此而定義的。如果您需要訪問每個元素,我建議您使用std :: vector,而不是使用[]運算符。

+0

啊對!非常感謝,隊友,生病了! –

+0

Re'1)',因爲我相信你會在文檔中看到,'std :: vector'有一個構造函數,它可以讓你用特定的初始元素數來創建它。 –