我在我的代码中使用了JUCE库和一些Boost头文件.Juce将"T"定义为宏(呻吟),Boost经常在其模板定义中使用"T".结果是,如果你以某种方式在Boost头之前包含JUCE头,那么预处理器会扩展Boost代码中的JUCE宏,然后编译器就会无可救药地丢失.
在大多数情况下保持我的包含顺序并不难,但是当你有一个包含一些其他类的JUCE类时,它会变得棘手,在链上的某个地方,一个文件包含Boost,如果有任何文件在它之前需要JUCE包括你遇到麻烦.
我最初的希望是解决这个问题
#undef T
Run Code Online (Sandbox Code Playgroud)
之前任何包括Boost.但问题是,如果我不重新定义它,那么其他代码会混淆"T"未被声明.
然后我想也许我可以这样做一些循环的#define技巧:
// some includes up here
#define ___T___ T
#undef T
// include boost headers here
#define T ___T___
#undef ___T___
Run Code Online (Sandbox Code Playgroud)
丑陋,但我认为它可能有用.
可悲的是没有.我在使用"T"作为宏的地方出错
'___T___' was not declared in this scope.
Run Code Online (Sandbox Code Playgroud)
有没有办法让这两个库可靠地一起工作?
我想将Python解释器嵌入到Qt 5应用程序中.
我在Qt 5中有一个工作应用程序,但是当我放入时
#include <Python.h>
Run Code Online (Sandbox Code Playgroud)
在顶部(Qt标题下方)编译中断
../sample/python3.3m/object.h:432:23: error: expected member name or ';' after declaration specifiers
PyType_Slot *slots; /* terminated by slot==0. */
~~~~~~~~~~~ ^
Run Code Online (Sandbox Code Playgroud)
当我将Python标题放在Qt标题之上时,它会破坏
In file included from ../Qt5.0.1/5.0.1/clang_64/include/QtGui/QtGui:59:
../Qt5.0.1/5.0.1/clang_64/include/QtGui/qpagedpaintdevice.h:63:57: error: expected '}'
A0, A1, A2, A3, A5, A6, A7, A8, A9, B0, B1,
^
/usr/include/sys/termios.h:293:12: note: expanded from macro 'B0'
#define B0 0
^
../Qt5.0.1/5.0.1/clang_64/include/QtGui/qpagedpaintdevice.h:62:19: note: to match this '{'
enum PageSize { A4, B5, Letter, Legal, Executive,
^
1 error generated.
Run Code Online (Sandbox Code Playgroud)
拜托,有谁知道为什么会这样?我可能是因为Qt和Python定义了一些常用词?我能做些什么呢?