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()中調用,如果相關的話。 ^
這就是QOpenGLFunctions的用途。它將GL/ES 2.0上下文引入任何繼承它的窗口/窗口小部件。我確實有所有這些代碼工作,但我正在重組它,所以它不是那麼混亂。我可以提出我的其他工作代碼,因爲我支持它之前打破了太多的事情。我只是難住爲什麼現在只給我這個範圍錯誤。儘管如此,感謝標題反饋。我仍然在學習如何組織我的C項目。 – Daykm
不知道globject.cpp:60包含什麼,但只有GeometryEngine從QOpenGLFunctions(protected)繼承,但在globject.h中沒有任何內容。所以我會假設globject.cpp中的任何內容:60,它不在從QOpenGLFunctions繼承的類的範圍內 –
哦,因爲GeometryEngine是繼承保護的,所以沒有其他類可以訪問這些函數?我想這是有道理的。 globject.cpp:60是glBindBuffer()我想。我其實已經繼續前進,並且或多或少地改變了事情。 – Daykm