我在我的代码中使用了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解释器3.4嵌入到Qt 5.2.1应用程序(64位)中.但是我有构建问题,我的意思是当我在main.cpp中包含Python头时它编译得很好.
#include <python.h>
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
Run Code Online (Sandbox Code Playgroud)
但是当我把它放在其他地方时(在Qt标题之后)
//
// embedpytest.cpp
//
#include <QLibrary>
#include <python.h>
EmbedPyTest::EmbedPyTest()
{
}
Run Code Online (Sandbox Code Playgroud)
我得到编译错误:
C:\Python34\include\object.h:435: error: C2059: syntax error : ';'
C:\Python34\include\object.h:435: error: C2238: unexpected token(s) preceding ';'
Run Code Online (Sandbox Code Playgroud)

这与此问题非常相似,但解决方案无效
谁知道如何解决这个问题?或建议一些干净的解决方法,以便python.h和Qt5能够幸福地生活在一起吗?
我在使用Qt4和boost :: signals时遇到问题。
搜索互联网时,我发现要放入.pro文件的no_keyword选项。
CONFIG += no_keywords
Run Code Online (Sandbox Code Playgroud)
问题是,我参与的项目使用cmake而不是.pro文件。那么,如何在cmake文件中打开此选项?