2014-02-17 1 views
2

메쉬 데이터 용 일종의 drawable 객체 클래스를 만들고 있는데이 링커 오류가 발생합니다. 이것은 Qt 튜토리얼 중 하나에서 사용 된 메쉬 드로잉을 처리하는 또 다른 클래스 위에 있습니다. 또한 드로잉 할 표면에 QGLWidget을 사용하고 있습니다. 헤더 파일이 첫 번째 클래스를 찾는 이유는 다음과 같습니다.Qt QOpenGLFunctions이 범위에서 선언되지 않았습니다.

#ifndef GLOBJECT_H 
#define GLOBJECT_H 
#include <QOpenGLFunctions> 
#include <QOpenGLShaderProgram> 
#include <QVector3D> 
#include <QVector2D> 
#include <QDebug> 
#include <QFile> 


struct VertexData 
{ 
    QVector3D position; 
    QVector2D texCoord; 
    QVector3D normal; 
}; 

class GLObject 
{ 
public: 
    GLObject(); 
    VertexData *data; 
    GLushort *indices; 
    GLuint vboIds[2]; 
    int faceCount, vertCount; 
    bool generateFromPLY(QString filename); 
}; 

#endif // GLOBJECT_H 

다음은 다른 클래스의 헤더입니다.

#ifndef GEOMETRYENGINE_H 
#define GEOMETRYENGINE_H 

#include <QObject> 
#include <QOpenGLFunctions> 
#include <QOpenGLShaderProgram> 
#include <QVector2D> 
#include <QVector3D> 
#include <QFile> 
#include <QDebug> 
#include <QVector> 
#include <globject.h> 

class GeometryEngine : public QObject, protected QOpenGLFunctions 
{ 
    Q_OBJECT 

public: 
    GeometryEngine(); 
    ~GeometryEngine(); 

    void init(); 
    void drawGeometry(QOpenGLShaderProgram *program); 
    //void drawCubeGeometry(QOpenGLShaderProgram *program); 
    bool generateFromPly(QString filename); 
    QVector<GLObject> drawables; 
    int drawableId = 0; 

}; 


#endif // GEOMETRYENGINE_H 

G : \ 보관 \ GLSLDemo \ globject.cpp : 60 : 오류 'glGenBuffers'가이 범위에서 선언되지 glGenBuffers (2 vboIds); 다른 gl 호출에 대해 동일한 오류가 발생합니다. 처음에는 GeometryEngine의 모든 코드를 시작했습니다. 나는 그때 범위 문제가 없었습니다. initilizeOpenGLFunctions()는 GeometryEngine의 init()에서 호출됩니다. ^

+0

QOpenGLFunctions가 그 이유입니다. 내가 이해하는 것을 상속 한 창/위젯에 GL/ES 2.0 컨텍스트를 소개합니다. 나는이 모든 코드가 작동하도록 만들었지 만 그것을 재구성하여 그렇게 엉망이 아닙니다. 너무 많은 것들을 깨기 전에 내가 백업 한 이후로 나는 다른 작업 코드를 끌어 올릴 수 있었다. 나는 지금 왜이 범위 오류를 내고있는 것일 뿐이 었는지 모르겠다. 헤더 피드백을 주셔서 감사합니다. 나는 아직도 C 프로젝트를 조직하는 법을 배우고있다. – Daykm

+1

globject.cpp : 60에 포함 된 내용이 확실하지만 GeometryEngine 만 QOpenGLFunctions (보호 됨)를 상속하지만 globote.h에는 아무 것도 없습니다. 따라서 globject.cpp에있는 것은 무엇이든 가정합니다 : 60, QOpenGLFunctions에서 상속 한 클래스의 범위에 있지 않습니다. –

+0

GeometryEngine이 protected로 상속 받았기 때문에 다른 클래스는 해당 함수에 액세스 할 수 없습니까? 나는 그것이 합리적이라고 생각한다. globject.cpp : 60 glBindBuffer() 내 생각 엔. 나는 실제로 앞서 갔고 물건을 어느 정도 뒤로 바꿨다. – Daykm

답변

-1

QT OpenGL이 이상합니다. 나는 QOpenGLFunctions가 공통적 인 문맥을 유지한다고 생각한다. 또한 나는 C++에서 나쁘고 잘못된 보호를 사용했다.

관련 문제