【问题标题】:Error while using the recursive inclusion of Qt headers [duplicate]使用 Qt 标头的递归包含时出错 [重复]
【发布时间】: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 == ========

标签: c++ qt qt-creator


【解决方案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 编译器,它会猜测需要什么 自行完成并正确编译所有示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    相关资源
    最近更新 更多