• 3234阅读
  • 5回复

[提问]一个#define引起的血案 [复制链接]

上一主题 下一主题
离线xsjqqq123
 

只看楼主 正序阅读 楼主  发表于: 2015-07-30
回复本帖可获得5RMB金钱奖励!
每人最多可获奖1次,奖池剩余25RMB金钱 (中奖几率10%)
最近使用海思SDK(c语言写的)开发软件,它给的头文件中有#define HANDLE int。
Qt原先的类型定义(Qt::HANDLE)与sdk里的定义(#define HANDLE int)冲突了,怎样可以不改动sdk定义而通过编译?我将#define HANDLE int注释掉能通过编译,但调用里边的函数时就崩溃……
具体编译时产生冲突 如下:
In file included from NetSDKDLL.h:10:0,
from decoderconfignav.h:11,
from decoderconfignav.cpp:1:
common_head.h:23:22: error: expected unqualified-id before ‘int’
#define HANDLE int
^
/usr/include/qt4/QtGui/qapplication.h:134:59: note: in expansion of macro ‘HANDLE’
QApplication(Display* dpy, Qt::HANDLE visual = 0, Qt::HANDLE cmap = 0, int = ApplicationFlags);
^
common_head.h:23:22: error: expected identifier before ‘int’
#define HANDLE int
^
/usr/include/qt4/QtGui/qapplication.h:135:60: note: in expansion of macro ‘HANDLE’
QApplication(Display *dpy, int &argc, char **argv, Qt::HANDLE visual = 0, Qt::HANDLE cmap= 0, int = ApplicationFlags);


离线firebolt

只看该作者 5楼 发表于: 2015-07-31
三楼正解
离线dbzhang800

只看该作者 4楼 发表于: 2015-07-31
回 roywillow 的帖子
roywillow:Qt编译的时候可以设置一个namespace,这样调用Qt的所有的东西就得加上namespace了,这个能不能解决? (2015-07-30 21:42) 

namespace 对宏是无效的
离线dbzhang800

只看该作者 3楼 发表于: 2015-07-31
首先,限制扩散,你在需要的地方包含sdk的头文件。理想情况下,你只需要在一个.cpp 文件内包含它就够了。

其次,在包含头文件之后,直接 undef 它应该就可以了
离线z55716368

只看该作者 2楼 发表于: 2015-07-31
条件编译?
每一个问题 都是一次进步
离线roywillow

只看该作者 1楼 发表于: 2015-07-30
Qt编译的时候可以设置一个namespace,这样调用Qt的所有的东西就得加上namespace了,这个能不能解决?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
快速回复
限100 字节
 
上一个 下一个