2017-12-27 810 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'有一个构造函数,它可以让你用特定的初始元素数来创建它。 –