2017-11-03 7 views
0

私はOpenGLを使用してマルチプラットフォームプロジェクトに取り掛かり、現在のコンテキストを照会するのに必要なところまで行きます。 私はを使用しました。を含むwglGetCurrentContext() windows.hはうまくいきました。一方名前が既に外部ライブラリに定義されているクラスを宣言するにはどうすればいいですか?

、Linuxでコンパイルしようとしたとき、私はglXGetCurrentContext()を使用して、内部Xlib.hを含むglx.h含むとだのXh

その起きます私のソースコードには、というステータスがあります。ステータスはですが、Xlibで同じと呼ばれるマクロがあります。つまり、#define Status int、Aha!どこにでも私のクラスを使用して以来大きな問題になっています。

この問題を解決するにはどうすればよいでしょうか?私が今考えているアイデアは、

  1. 私のクラスの名前を何か他のものに変更します...なぜですか?
  2. 使用#pragma push_macro("Status")は、あなたが他の勧告は、私に知らせている場合は、私は非常にそれをappreaciate #undef Status
  3. のOpenGLのコンテキストを照会するために、より堅牢でポータブルな方法を探す

が続きます。

+2

リミットglx.hし、マクロ未定義に含まれるファイルの数。ヘッダーには含めないでください! –

+3

一意のファイルに依存関係を移動できますか?あなたは '#undef Status'を安全にどこで実行できますか? – Jarod42

答えて

3

、あなたは独自の翻訳単位にglXGetCurrentContext()を隔離することができる:

myGlXGetCurrentContext.hpp

GLUint myGlXGetCurrentContext(); 

myGlXGetCurrentContext。 cpp

#include<glx.h> 
GLUint myGlXGetCurrentContext(){ return glXGetCurrentContext(); } 

whatever.hpp

#include<myGlXGetCurrentContext.hpp> 
... 
-3

あなたのクラスを名前空間に入れてみてください。

最低限で

http://en.cppreference.com/w/cpp/language/namespace

https://msdn.microsoft.com/en-us/library/5cb46ksf.aspx

+2

MACROに名前空間のスコープがありません... – Jarod42

+0

私はMACROについてではなく、クラスについて話していました。 – armo

+0

私の最初の考えは名前空間でしたが、問題を考えても、名前空間が何であっても前プロセッサが名前を置き換えてしまうことはないので、名前空間は役に立ちません。 – BRabbit27

関連する問題