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:将类重新定义为前向声明并不是一件坏事(它可能指向排列不好的代码,但这不是一个问题)