【问题标题】:C++ private array element removed when trying to print in another function尝试在另一个函数中打印时删除了 C++ 私有数组元素
【发布时间】:2015-12-03 20:54:15
【问题描述】:

对不起标题,我不知道怎么说。

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

在一个函数中,我将一个元素(在本例中为纹理)添加到数组中,当我打印它时,它很好。

但是当我在另一个函数中打印第一个元素时(在数组所在的同一个类中)它消失了,只有 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();
    }

编辑: 这是它只打印数组(0)的默认值的函数:

GLuint Window::getTexture(int index){
    std::cout << texture[0];
    return texture[index];
}

【问题讨论】:

  • 你能显示更多代码吗?特别是似乎使它消失的打印代码。 (stackoverflow.com/help/mcve)
  • @AndyM 我编辑了问题,希望对您有所帮助
  • 您可能复制了Window 类。尝试定义一个私有复制构造函数,看看编译器是否开始抱怨。
  • 您的意思是让getTexture 打印texture[0]texture[index]
  • @Andy M 这实际上是为了返回图像以供另一个类使用,但我只是使用该函数找出数组元素(0)的值。

标签: c++ arrays opengl int


【解决方案1】:

当我在每个类中定义一个构造函数并将对象传递给调用 initTextures 的类时,它就起作用了。现在可以了,谢谢大家! :D

【讨论】:

  • 所以,当它坏掉时,你有类似 Window w; w.getTextures() 的东西,所以你是从一个全新的 Window 获取纹理,而不是你加载纹理的那个?
  • 是的,但是我在多个类中使用了不同的对象,所以它们是复制而不是引用。顺便说一句,我不能接受我自己的答案,所以这个问题保持开放:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-02
相关资源
最近更新 更多