0

これが非常に基本的な質問である場合は申し訳ありませんが、混乱しています
.Visual Studioを使用していてQOpenGLWidget、(基本クラスから継承して)カスタムクラスを作成しています.私の問題は次のとおりです:

  • #include <QOpenGLWidget>カスタム クラスを追加し、さらに#includefor を追加するとglew.h、で定義されているものにアクセスできます。glew.h
  • #include <QtWidgets>しかし、カスタム クラス (これもカバーします)を追加すると、QOpenGLWidgetで定義されているものにアクセスできず、glew.h「識別子が定義されていません」というエラーが表示されます (たとえば、glGenVertexArrays)

誰かが私がここで欠けているものを教えてもらえますか? 必要なもの ( ) だけを含めることは#include <QOpenGLWidget>、 にたくさんのものを含めるよりも優れていると思います<QtWidgets>が、 で定義されているものにアクセスできなくなるのはなぜglew.hですか?

どんな助けでも大歓迎です

4

1 に答える 1

1

Qt の OpenGL ラッパーとほとんどのOpenGL ロード ライブラリヘッダーを同時に含めることはできません。異なる .cpp ファイルには異なるヘッダーを含めることができますが、同じ .cpp には含めることができません。したがって、使用するものを選択する必要があります: GLEW または Qt の OpenGL ラッパー。

これが機能しない理由は、ローダーが一般にインクルード ガードを使用して、誤ってインクルード<GL/gl.h>または類似のヘッダーを防止するためです。ライブラリのロードは、他の OpenGL ヘッダーと同じシンボルを定義していることが多いため、排他的である傾向があります。そして、それらがそれを妨げなかった場合、両方を含めようとすると、複数定義シンボル エラーが発生する可能性があります。

Qt の OpenGL ラッパー自体が読み込みライブラリです。したがって、GLEW や他のローダーが使用するインクルード ガードを定義して、同じ除外トリックを実行します。そのため、同じ .cpp ファイルで両方を使用することはできません。

于 2016-02-29T16:51:34.030 に答える