C++ 包含来自标题的结构

C++ 包含来自标题的结构,c++,qt,C++,Qt,如何将外部头文件中定义的struct包含到另一个文件中?起初,我通过指针传递结构,所以我只需要一个前向声明。但现在我想按值传递,无法使其编译。标题lagerwaltung.h确实包含结构,那么问题出在哪里 文件lagerwaltung.h: #ifndef LAGERVERWALTUNG_H #define LAGERVERWALTUNG_H struct etikettInfo{ QString userName; QList<struct properties_con

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

文件
lagerwaltung.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
#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文件都有include-guard

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

就目前的情况而言

struct etikettInfo{
    QString userName;
    QList<struct properties_content *> inhalte;
};
struct-etikettInfo{
QString用户名;
QList inhalte;
};
需要正确的include才能使其成为正确声明的结构。所以加上

#include <QString>
#include <QList>
#包括
#包括
以及
属性\u内容的声明

我还将etikett1.h包含在lagerwaltung.h中

这是你的错误。在
lagerwaltung.h
中包括
etikett1.h
,其中包括
etikett1.h
,后者包括
lagerwaltung.h
等等。换句话说,您有一个循环依赖项。您的include防护可以防止无限包含,但也会导致其中一个头先包含另一个头。在这种情况下,首先包括
lagerwaltung.h
,然后再定义任何东西-
etikettInfo
,尤其是它包括
etikett1.h
。。。这取决于尚未定义的
etikettInfo


如果
lagerwaltung.h
确实依赖于
etikett1.h
并且
etikett1.h
中唯一依赖于
lagerwaltung.h
的是
etikettInfo
lagerwaltung.h
中没有任何东西依赖于
etikettInfo
,那么最简单的解决方案就是拆分
etikettInfo
放入另一个标题中,并将其包含在
etikett1.h
中,而不是
lagerwaltung.h

在etikett1.h中,您将包含
结构etikettInfo
类lagerwaltung
的lagerwaltung.h。紧接着,您重新声明
类lagerwaltung
。对我来说,这看起来是件坏事。另外:请发布(相关)错误消息。错误消息在代码(注释)中。为什么不创建一个文件
etikettInfo.h
,将结构放在那里,并包含在需要的地方?(附言:丹格利什在你身上很强大)好的,这是正确的观点,但我认为这不会改变任何事情?在这个项目中,我混合了各种语言,我的坏:/@KompjoeFriek:将类重新定义为前向声明并不是一件坏事(它可能指向排列不好的代码,但这不是一个问题)