错误:'textureID'是'Texture'的私有成员

Error: 'textureID' is a private member of 'Texture'

本文关键字:成员 textureID 错误 Texture      更新时间:2023-10-16

错误的解决方案是什么,"textureID是Texture的私有成员。"Texture是一个类,textureID为无符号整数。程序运行的图像是一个24位未压缩位图(我认为)。错误出现在glBindTexture(GL_TEXTURE_2D,tex->textureID)。以下是代码的一部分。

    void display() {
    preProcessEvents();
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    //Camera Transformations
    glRotatef(Camera::rotation.x, 1, 0, 0);
    glRotatef(Camera::rotation.y, 0, 1, 0);
    glRotatef(Camera::rotation.z, 0, 0, 1);
    glTranslatef(-Camera::position.x, -Camera::position.y, -Camera::position.z);
    glBegin(GL_TRIANGLES);
    glColor3f(1.0, 0.0, 0.0);
    glVertex3f(-1, 0, -3);
    glColor3f(0.0, 1.0, 0.0);
    glVertex3f(0, 2, -3);
    glColor3f(0.0, 0.0, 1.0);
    glVertex3f(1, 0, -3);
    glEnd();
    glBindTexture(GL_TEXTURE_2D, tex->textureID);
    glBegin(GL_QUADS);
    glColor3f(1, 1, 1);
    glTexCoord2f(100, 100);
    glVertex3f(100, 0, 100);
    glTexCoord2f(-100, 100);
    glVertex3f(-100, 0, 100);
    glTexCoord2f(-100, -100);
    glVertex3f(-100, 0, -100);
    glTexCoord2f(100, -100);
    glVertex3f(100, 0, -100);
    glEnd();
    glBindTexture(GL_TEXTURE_2D, 0);
    glutSwapBuffers();
}

该类位于头文件中,代码如下。"unsigned int textureID"应该在public下吗?这可能就是错误说textureID是私有的原因吗?

    #ifndef __Xcode_Glut_Tutorial__Texture__
    #define __Xcode_Glut_Tutorial__Texture__
    #include <iostream>
    #include <OpenGL/gl.h>
    using namespace std;
    class Texture {
        unsigned int textureID;
    public:
        Texture(void* data, int w, int h, int format);
        static Texture* loadBMP(const char* filename);
    };

    #endif /* defined(__Xcode_Glut_Tutorial__Texture__) */

textureIDTexture类中是私有的

解决方案1:
您必须更改:

class Texture {
    unsigned int textureID;
public:
    Texture(void* data, int w, int h, int format);
    static Texture* loadBMP(const char* filename);
};

class Texture {
public:
    unsigned int textureID;
    Texture(void* data, int w, int h, int format);
    static Texture* loadBMP(const char* filename);
};


解决方案2:
使用公共getter函数:

class Texture {
    unsigned int textureID;
public:
    Texture(void* data, int w, int h, int format);
    static Texture* loadBMP(const char* filename);
    unsigned int get_textureID()
    {
        return textureID;
    }
};

和:

 glBindTexture(GL_TEXTURE_2D, tex->get_textureID());