Ubuntu 14.04でQt Creatorを使用してハードウェアを制御するためのGUIを作成しています。私はカメラ(camera.h
)を制御するクラスと、USB RS232シリアルコンバータ(light.h
)に接続された光源を制御するクラスを持っています。このクラスの2つのヘッダーファイルには、製造元から提供されたヘッダーが含まれています。uEye.h
とftdi2xx.h
はそれぞれカメラとシリアルコンバーターです。両方のライブラリを別々に使用すると、両方のライブラリが完全に機能します。2つのライブラリの2つのヘッダーファイルの競合する宣言を解決するにはどうすればよいですか?
/home/g/Desktop/release/WinTypes.h:14: error: conflicting declaration
'typedef unsigned int BOOL'
typedef unsigned int BOOL;
/usr/include/uEye.h:1570: error: 'BOOL' has a previous declaration as
'typedef int32_t BOOL'
typedef int32_t BOOL;
など:私は私のmainwindow.h
にそれらを含めるしようとすると、しかし、私は次のエラーメッセージ(その14の周り)を取得します。私が他の投稿から理解していることは、C++での簡単な修正がないようです。どのようにそれを解決するための提案(異なるハードウェアを使用するか、2つの別々のプログラムを使用することを除いて)?
更新:それはまだ私の質問に正確な答えはありませんが、
は、最後に私は、回避策を見つけました。私は次のように言った:私はftdi2xx.h
ファイルに行って、#include WinTypes.h
を引き起こす問題をコメントした。 light.h
には、最初にuEye.h
が含まれていました(このヘッダには、ある種のWinTypes.h
も含まれていると思います)。それから、で隠蔽されていなかったいくつかの不足のtypedef
宣言を追加してから、ftdi2xx.h
を追加する必要がありました。それは動作しますが、それはサードパーティのもので騒ぐことを含むので、非常にきれいでいいソリューションではありません。
2つのライブラリをラップすることで、両方のヘッダーが同じ翻訳単位に含まれることはありません。それぞれのラッパーコンポーネントは、ラッパーコンポーネントの実装にのみ含まれます。 (私はうまくいくと思うが、未定義の振る舞いをするかどうかは、2つのヘッダが衝突するかどうかによって決まる) – BoBTFish
この記事に示されているようなものかどうか:https://stackoverflow.com/questions/6670738/is-それは良いアイデアから包み込みの名前空間ブロックです – Hans
Ehw、いいえ、それはひどい考えです。基本的には、独自のコンポーネントを作成して、同じ機能を提供しますが、既存のライブラリを使用して実装された独自のインターフェイスを使用することを意味します。それは少し面倒かもしれませんが、あなたがどの名前が公開されているかを制御します(また、いくつかの定型文を隠す良い場所かもしれません)。 – BoBTFish