使用 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 类依赖于secondsecond 类依赖于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:“字节”:不明确的符号 [重复]

使用 PostgreSQL 编译静态 Qt 5.10.0 时出错

设置可重用标头时出错:'无法在包中加载 NIB

LNK1104 将 Boost 库添加到 Qt 项目时出错

SOAP 客户端错误:“获取 Http 标头时出错”

使用 QT 和 OpenCV 时出错