相关疑难解决方法(0)

我可以重新定义C++宏然后再定义它吗?

我在我的代码中使用了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)

有没有办法让这两个库可靠地一起工作?

c++ macros boost c-preprocessor

40
推荐指数
3
解决办法
1万
查看次数

在Qt 5中嵌入Python3

我想将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)

在此输入图像描述

这与此问题非常相似,但解决方案无效

在Qt 5中嵌入Python

谁知道如何解决这个问题?或建议一些干净的解决方法,以便python.h和Qt5能够幸福地生活在一起吗?

c++ python qt qmake qt-signals

8
推荐指数
2
解决办法
3169
查看次数

在cmake文件中打开no_keyword(Qt选项)以使用boost :: signals

我在使用Qt4和boost :: signals时遇到问题。

搜索互联网时,我发现要放入.pro文件的no_keyword选项。

CONFIG += no_keywords
Run Code Online (Sandbox Code Playgroud)

问题是,我参与的项目使用cmake而不是.pro文件。那么,如何在cmake文件中打开此选项?

qt boost

2
推荐指数
1
解决办法
546
查看次数

标签 统计

boost ×2

c++ ×2

qt ×2

c-preprocessor ×1

macros ×1

python ×1

qmake ×1

qt-signals ×1