【发布时间】:2015-06-09 10:04:04
【问题描述】:
如何将外部头文件中定义的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 文件都有包含保护。
好的,错误消息(参见代码中的 cmets)确实非常具有描述性,但我不知道我应该做些什么不同。
【问题讨论】:
-
在 etikett1.h 中包含 lagerverwaltung.h,其中包含
struct etikettInfo和class Lagerverwaltung。之后你重新声明class Lagerverwaltung。对我来说,这看起来是件坏事。另外:请发布(相关)错误消息。 -
错误信息在代码内部(cmets)。
-
为什么不创建一个文件
etikettInfo.h,把结构放在那里,然后把它包含在你需要的地方? (ps:你的英语很强) -
好的有效点,但我认为这不会改变任何东西?在这个项目中,我混合了语言,我的错:/
-
@KompjoeFriek:将类重新声明为前向声明并不是一件坏事(它可能表明代码排列不当,但这不是问题)