glew を使用する QGLWidget のサブクラスをコンパイルするのに苦労しています。Windows 7でQt 5.0.1 + MinGW 4.7を実行しています.Glew 1.7.0は上記のMinGWでコンパイルされています。
QGLWidget を UGGLWidget でサブクラス化し、QGLWidget がインクルード"GL/glew.h"
する前にインクルードしました。コンパイルすると、次のような 200 エラーが発生します。
- 「関数」が別の種類のシンボルとして再宣言されました
- 競合する宣言'typedef'
私の質問: Qt5 でコンパイルされた glew を使用する QGLWidget のサブクラスを取得するにはどうすればよいですか?
編集: 別のセットアップ (Qt4.7 + MinGW4.4) で同じアプローチを試みました。コンパイルして問題なく動作します。また、最新バージョンの glew (Qt5.0.1 + MinGW4.7 + glew1.9.0) を使用してみましたが、どちらもコンパイルされず、同じコンパイル エラーが発生します。
コンパイラ出力の乱雑なスニペットを次に示します。
> In file included from
> ..\..\..\..\..\..\Qt\Qt5.0.1\5.0.1\mingw47_32\include/QtGui/qopengl.h:55:0,
> from ..\..\..\..\..\..\Qt\Qt5.0.1\5.0.1\mingw47_32\include\QtOpenGL/qgl.h:47,
> from ..\..\..\..\..\..\Qt\Qt5.0.1\5.0.1\mingw47_32\include\QtOpenGL/QGLWidget:1,
> from src\UGGLWidget.h:4,
> from src\UGGLWidget.cpp:2: ..\..\..\..\..\..\Qt\Qt5.0.1\5.0.1\mingw47_32\include/GLES2/gl2.h:614:153:
> error: 'void __glewVertexAttribPointer(GLuint, GLint, GLenum,
> GLboolean, GLsizei, const GLvoid*)' redeclared as different kind of
> symbol In file included from src\UGGLWidget.cpp:1:0:
> ..\3rdPartyLibs\glew\include/GL/glew.h:13609:46: error: previous
> declaration of 'void (__attribute__((__stdcall__)) *
> __glewVertexAttribPointer)(GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid*)'
最後になりましたが、サブクラスのヘッダーとソース ファイルです。今のところ本当に空いています。
ソース:
//UGGLWidget.cpp
#include "GL/glew.h"
#include "UGGLWidget.h"
UGGLWidget::UGGLWidget(QWidget *parent) : QGLWidget(parent) { ... }
ヘッダ:
//UGGLWidget.h
#ifndef UGGLWIDGET_H
#define UGGLWIDGET_H
#include <QGLWidget>
class UGGLWidget : public QGLWidget
{
Q_OBJECT
public:
explicit UGGLWidget(QWidget *parent = 0);
};
#endif // UGGLWIDGET_H
ああ、おそらく .pro ファイルの関連部分
QT += core gui opengl
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
LIBS += -L$$quote(../3rdPartyLibs/glew/lib/) -lglew32
LIBS += -lopengl32 -lglu32
INCLUDEPATH += $$quote(../3rdPartyLibs/glew/include)