qdir.h与x.h冲突(X11):如何解决?

时间:2013-11-24 13:50:12

标签: c++ qt x11

我正在尝试在使用QDir的项目中使用QFileDialog。简单地包含该文件会导致编译错误(Qt版本为4.8.5):

In file included from file.qt.cpp:25:
In file included from another_file.qt.h:26:
In file included from /usr/include/QtCore/QDir:1:
/usr/include/QtCore/qdir.h:107:21: error: expected '}'
               Unsorted    = 0x03,
               ^
/usr/include/X11/X.h:540:19: note: expanded from macro 'Unsorted'
#define Unsorted                0
                                ^
/usr/include/QtCore/qdir.h:104:19: note: to match this '{'
    enum SortFlag { Name        = 0x00,
                  ^
[... some more errors, but I think these are related to the above error ...]


6 errors generated.
make[2]: *** [CMakeFiles/Volume2.dir/OGLFrame.qt.cpp.o] Error 1
make[1]: *** [CMakeFiles/Volume2.dir/all] Error 2
make: *** [all] Error 2

我检查了qdir.h并且有一个结束括号。但是由于错误表明X.h中的#define和枚举元素之间存在冲突。我发现8年前的一个错误报告(http://code.mythtv.org/trac/ticket/1417)建议在X11标题之前包含Qt标题。由于我不是自己包含X.h而是链接X11,我很确定它不适用于此。

这就留下了如何解决这个冲突的问题?非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

如果可能的话,更改include的顺序,或者在包含qdir.h之前执行#undef Unsorted以清理x.h的混乱