我正在創建一個GUI來控制Ubuntu 14.04上的Qt Creator硬件。我有一個類來控制攝像頭(camera.h
)和一個類來控制連接到USB RS232串行轉換器(light.h
)的光源。這個類的兩個頭文件分別包括製造商提供的頭文件:uEye.h
和ftdi2xx.h
分別用於相機和串行轉換器。如果我單獨使用它們,兩個庫都可以完美工作然而,當我試圖將它們納入到我的mainwindow.h
我獲得以下錯誤消息(其周圍14):如何解決兩個庫的兩個頭文件的衝突聲明?
/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;
等。我從其他帖子瞭解到,似乎在C++中沒有簡單的修復方法。任何建議如何解決(除了使用不同的硬件或有兩個單獨的程序)?
更新:
終於讓我找到一個解決辦法,但它仍然沒有確切的回答我的問題。我做了如下:我去了ftdi2xx.h
文件並評論導致#include WinTypes.h
出問題。在light.h
我包括uEye.h
第一(我猜這個頭還包括某種WinTypes.h
)。然後,我需要添加一些typedef
聲明,這些聲明在包含ftdi2xx.h
之前不被uEye.h
隱藏。它的工作原理,但它不是一個非常乾淨和漂亮的解決方案,因爲它涉及與第三方的東西搞亂。
你可以包裝2個庫,以使兩個頭文件永遠不會被包含在同一個翻譯單元中:每個只會包含在你的包裝器組件的實現中。 (我預計它會工作,但是否打不確定行爲取決於2個標頭衝突。) – BoBTFish
您的意思是像這篇文章中顯示的內容:https://stackoverflow.com/questions/6670738/is-它是一個好主意包裝一個包含在一個名稱空間塊 – Hans
Ehw,不,這是一個可怕的想法。我的意思是基本上你創建了你自己的組件,提供相同的功能,但是使用你自己的接口,這是通過使用現有的庫來實現的。這可能有點麻煩,但可以讓你控制什麼名字被暴露(可能是隱藏一些樣板的好地方)。 – BoBTFish