使用 Qt 标头的递归包含时出错 [重复]
Posted
技术标签:
【中文标题】使用 Qt 标头的递归包含时出错 [重复]【英文标题】:Error while using the recursive inclusion of Qt headers [duplicate] 【发布时间】:2018-12-29 06:31:32 【问题描述】:我有一个大项目,其中出现了非常难以理解的错误,之后我创建了一个新项目重复它:
项目结构很简单:
main.cpp 第一.h 第二个.h
first.h
#ifndef FIRST_H
#define FIRST_H
#include "second.h"
class first
public:
first();
;
#endif // FIRST_H
秒.h
#ifndef SECOND_H
#define SECOND_H
#include "first.h"
class second
public:
second();
;
#endif // SECOND_H
一切都很合乎逻辑,但 Qt Creator 的想法却截然不同:
D:\WinFiles\Documents\QT\DELME1\DELME1\second.h:1: error: unterminated conditional directive
对于继承这个结构是需要的,我有点茫然
【问题讨论】:
#ifndef FIRST_H #define FIRST_H #endif // FIRST_H 应该可以解决这个问题。还是不行? 不,包含守卫不能解决循环包含问题。 我在类中没有依赖关系,只有一个文件包含在另一个文件中。 你有依赖关系,first
类依赖于second
,second
类依赖于first
。请查看重复链接,应该可以解决您的问题。
什么都不懂! Microsoft Visual Studio 2017 编译了这段代码,并没有发现任何奇怪的地方:========== Build:successful:1,with errors:0,no change:0,skipped:0 == ========
【参考方案1】:
MinGW 编译器问题解决:
//first.h
#ifndef FIRST_H
#define FIRST_H
class second;
class first
public:
first();
;
#endif // FIRST_H
//second.h
#ifndef SECOND_H
#define SECOND_H
class first;
class second
public:
second();
;
#endif // SECOND_H
第二种解决方案是对 qt 使用 MSVC 编译器,它会猜测需要什么 自行完成并正确编译所有示例。
【讨论】:
以上是关于使用 Qt 标头的递归包含时出错 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
在构建期间使用 Qt 时出错:C2872:“字节”:不明确的符号 [重复]