Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;尝试在另一个函数中打印时删除了私有数组元素_C++_Arrays_Opengl_Int - Fatal编程技术网

C++ C++;尝试在另一个函数中打印时删除了私有数组元素

C++ C++;尝试在另一个函数中打印时删除了私有数组元素,c++,arrays,opengl,int,C++,Arrays,Opengl,Int,我为标题感到抱歉,我不知道该怎么说 但是,我有一个int(GLuint,但它通常是相同的)数组声明为private 在一个函数中,我向数组中添加一个元素(在本例中是一个纹理),当我打印它时,就可以了 但是当我在另一个函数中打印第一个元素(在数组所在的同一个类中)时,它就消失了,只有0(我认为当您声明一个不包含元素的整数数组时,它是默认的0) 阵列: private: GLuint texture[20]; 我正在打印第一个元素(我刚刚在该函数中添加了该元素),但在另一个函数中,该元素刚

我为标题感到抱歉,我不知道该怎么说

但是,我有一个int(GLuint,但它通常是相同的)数组声明为private

在一个函数中,我向数组中添加一个元素(在本例中是一个纹理),当我打印它时,就可以了

但是当我在另一个函数中打印第一个元素(在数组所在的同一个类中)时,它就消失了,只有0(我认为当您声明一个不包含元素的整数数组时,它是默认的0)

阵列:

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];
}