c++ - Qt4中宏的继承

标签 c++ macros qt4

我的部分代码看起来像这样。

#include <QObject>
#define MYMACRO : public QObject
#define SIGNAL_MACRO Q_OBJECT signals: void testSignal(std::string s);
#define EMIT_MACRO emit testsignal(s);

class myclass MYMACRO
{
   SIGNAL_MACRO
...

void myclass::method()
{
   std::string s("string");
   EMIT_MACRO
}

如果我将宏的内容写入它们应该展开的位置,它就可以正常工作。但是如果我保留宏并让预处理器完成工作,那么我会得到一个“对 myclass::testSignal(std::string) 的 undefined reference ”。我不明白有什么区别。预处理器应该在第一次遇到宏时展开它们,就像我自己写出来的一样。我以为我可以在宏中写任何东西,它会被简单地复制粘贴到需要的地方。

最佳答案

我认为这里的问题可能是 Qt 元对象编译器在 C++ 预处理器之前运行,所以它看不到 SIGNAL_MACRO< 中的 Q_OBJECT/。来自Qt Reference Documentation :

The moc tool reads a C++ header file. If it finds one or more class declarations that contain the Q_OBJECT macro, it produces a C++ source file containing the meta-object code for those classes.

我的建议是,不要这样做。

关于c++ - Qt4中宏的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7332383/

相关文章:

python - 似乎无法让 pyqt 倒计时器工作

c++ - 异步服务器在没有明显原因的情况下停止从客户端获取数据

c++ - SQLite 磁盘使用情况

macros - SAS 宏从表中提取选定的行

rust - pin_mut!() 宏如何工作?

c - 从宏的内容定义宏

c++ - 多次调用索引运算符的性能

c++ - 如何定义在命名空间中的模板上声明的友元运算符?

c++ - QTreeView 不显示模型

qt - 当子小部件具有焦点时,如何更改父小部件的背景?