C++ C++;尝试在另一个函数中打印时删除了私有数组元素
我为标题感到抱歉,我不知道该怎么说 但是,我有一个int(GLuint,但它通常是相同的)数组声明为private 在一个函数中,我向数组中添加一个元素(在本例中是一个纹理),当我打印它时,就可以了 但是当我在另一个函数中打印第一个元素(在数组所在的同一个类中)时,它就消失了,只有0(我认为当您声明一个不包含元素的整数数组时,它是默认的0) 阵列:C++ C++;尝试在另一个函数中打印时删除了私有数组元素,c++,arrays,opengl,int,C++,Arrays,Opengl,Int,我为标题感到抱歉,我不知道该怎么说 但是,我有一个int(GLuint,但它通常是相同的)数组声明为private 在一个函数中,我向数组中添加一个元素(在本例中是一个纹理),当我打印它时,就可以了 但是当我在另一个函数中打印第一个元素(在数组所在的同一个类中)时,它就消失了,只有0(我认为当您声明一个不包含元素的整数数组时,它是默认的0) 阵列: private: GLuint texture[20]; 我正在打印第一个元素(我刚刚在该函数中添加了该元素),但在另一个函数中,该元素刚
private:
GLuint texture[20];
我正在打印第一个元素(我刚刚在该函数中添加了该元素),但在另一个函数中,该元素刚刚消失。我在头文件中声明了数组
这足够了吗?还是我必须显示更多的代码(也是OpenGL的东西)
提前谢谢
编辑:
元件打印正确的功能:
void Window::initTextures(const char * imgPath, int index){
//SDL TEXTURE TO CONVERT
SDL_Surface * surface = IMG_Load(imgPath);
//GENERATING THE TEXTURE
glGenTextures(1, &texture[index]); //THIS STORES THE IMAGE IN THE ARRAY
glBindTexture(GL_TEXTURE_2D, texture[index]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
std::cout << texture[0] << std::endl; //THIS PRINTS THE ELEMENT
//CHECKING IF RGB OR RGBA FORMAT
if (surface->format->BytesPerPixel == 4) {
glTexImage2D(GL_TEXTURE_2D, 0, surface->format->BytesPerPixel, surface->w, surface->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, surface->pixels);
}else {
glTexImage2D(GL_TEXTURE_2D, 0, surface->format->BytesPerPixel, surface->w, surface->h, 0, GL_RGB, GL_UNSIGNED_BYTE, surface->pixels);
}
//DESTROYING THE SURFACE(BECAUSE WE DONT NEED IT)
SDL_FreeSurface(surface);
test();
}
void Window::initTextures(const char*imgPath,int index){
//要转换的SDL纹理
SDL_表面*表面=IMG_载荷(imgPath);
//生成纹理
glGenTextures(1,&texture[index]);//将图像存储在数组中
glBindTexture(GL_TEXTURE_2D,纹理[索引]);
glTexParameteri(GL\u纹理\u 2D,GL\u纹理\u最小\u过滤器,GL\u最近);
glTexParameteri(GL_纹理2D、GL_纹理MAG_过滤器、GL_线性);
标准::cout字节/像素==4){
GLTEXAGE2D(GL_纹理_2D,0,表面->格式->字节/像素,表面->w,表面->h,0,GL_RGBA,GL_无符号_字节,表面->像素);
}否则{
GLTEXAGE2D(GL_纹理_2D,0,表面->格式->字节/像素,表面->w,表面->h,0,GL_RGB,GL_无符号_字节,表面->像素);
}
//破坏表面(因为我们不需要它)
SDL_自由曲面(曲面);
test();
}
编辑:
此函数仅打印数组的默认值(0):
GLuint窗口::getTexture(int索引){
std::cout当我在每个类中定义一个构造函数并将对象传递给调用initTextures的类时,它工作了。现在它工作了,谢谢大家!:D你能显示更多的代码吗?特别是那些似乎使它消失的打印代码。()@我编辑了这个问题,希望它能帮助你复制窗口
类。试着定义一个私有副本构造函数,看看编译器是否开始抱怨。你的意思是让getTexture
打印纹理[0]
还是纹理[index]
?@Andy M它实际上是要返回图像以供在另一个类中使用,但我只是使用该函数来找出数组元素(0)的值。因此,当它被破坏时,您有类似于Window w;w.getTextures()的内容
,因此您是从全新的窗口获取纹理的,而该窗口不是您加载纹理的窗口?是的,但我在多个类中使用了不同的对象,因此它们是复制而非引用的。顺便说一句,我无法接受我自己的答案,因此此问题仍然存在:/
GLuint Window::getTexture(int index){
std::cout << texture[0];
return texture[index];
}