2014-02-17 132 views
2

我正在爲網格數據創建一種可繪製對象類,並且出現此鏈接器錯誤。這也是另一個處理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(protected)繼承,但在globject.h中沒有任何內容。所以我會假設globject.cpp中的任何內容:60,它不在從QOpenGLFunctions繼承的類的範圍內 –

+0

哦,因爲GeometryEngine是繼承保護的,所以沒有其他類可以訪問這些函數?我想這是有道理的。 globject.cpp:60是glBindBuffer()我想。我其實已經繼續前進,並且或多或少地改變了事情。 – Daykm

回答

-1

QT OpenGL很奇怪。我認爲QOpenGLFunctions維護一個共同的上下文。此外,我在C++不好,並使用保護錯誤。