我正在创建一个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