包括标头中的结构

Include struct from header

本文关键字:结构 包括标      更新时间:2023-10-16

如何将外部头文件中定义的struct包含到另一个文件中?起初,我通过指针传递结构,所以我只需要一个正向声明。但现在我想传递值,无法使其编译。标头lagerverwaltung.h确实包含结构,那么问题出在哪里?

文件lagerverwaltung.h:

#ifndef LAGERVERWALTUNG_H
#define LAGERVERWALTUNG_H
struct etikettInfo{
    QString userName;
    QList<struct properties_content *> inhalte;
};
class Lagerverwaltung : public QMainWindow
{
    Q_OBJECT
    ... and so on
};
#endif // LAGERVERWALTUNG_H

文件etikett1.h:

#ifndef ETIKETT1_H
#define ETIKETT1_H
#include "lagerverwaltung.h" // for struct etikettInfo
class Lagerverwaltung;
//struct etikettInfo;
namespace Ui {
class Etikett1;
}
class Etikett1 : public QMainWindow
{
    Q_OBJECT
public:
    explicit Etikett1(Lagerverwaltung *mainwindow,
                      etikettInfo etikettData,  // <- struct etikettInfo has not been declared
                      QWidget* parent = 0);
    ~Etikett1();
private:
    Ui::Etikett1 *ui;
    Lagerverwaltung *lgrvw;
    etikettInfo etikettData;   // <- struct etikettInfo does not name a type
};
#endif // ETIKETT1_H

如果重要的话:两个-h文件都包含了保护程序。

好的,错误消息(参见代码中的注释(确实很有描述性,但我不知道我应该做什么不同。

此外,我一直在lagerverwaltung.h 内部包含etikett1.h

这是你的错误。lagerverwaltung.h包含etikett1.hetikett1.h包含lagerverwaltung.h,以此类推。换句话说,你有一个循环依赖。include保护可以防止无限包含,但也会导致其中一个标头被包含在另一个标头之前。在这种情况下,首先包括lagerverwaltung.h,在定义任何东西之前——特别是etikettInfo——它包括etikett1.h。。。这取决于尚未定义的CCD_ 12。

如果lagerverwaltung.h真的依赖于etikett1.h,并且etikett1.hlagerverwaltung.h中唯一依赖的是etikettInfo,而lagerverwaltung.h中没有任何内容依赖于etikettInfo,那么最简单的解决方案是将etikettInfo的定义拆分为另一个报头,并将其包括在etikett1.h中而不是lagerverwaltung.h中。

struct etikettInfo{
    QString userName;
    QList<struct properties_content *> inhalte;
};

需要适当的includes才能使其成为正确声明的结构。所以添加

#include <QString>
#include <QList>

以及CCD_ 23的声明。