2013-11-24 99 views
2

我正在尝试在使用QDir的项目中使用QFileDialog。只包括该文件导致编译错误(Qt版本是4.8.5):qdir.h与x.h冲突(X11):如何解决?

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和enum元素之间存在冲突。我从8年前发现了一个bug报告(http://code.mythtv.org/trac/ticket/1417),建议在X11头文件之前包含Qt头文件。由于我不是自己包含X.h,而是连接到X11,所以我很肯定它不适用于此。

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

回答

2

如果可能的话改变包含的顺序,或者在包含qdir.h以清理x.h的混乱之前做一个#undef Unsorted。

+1

是的。始终包含X标头*最后*。 – peppe