2015-06-09 2 views
1

Как включить 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-файлы действительно должны включать в себя охрану.

ОК сообщения об ошибках (см. Комментарии в коде) на самом деле довольно описательные, но я не знаю, что я должен делать по-другому.

+1

В etikett1.h вы включаете lagerverwaltung.h, который содержит 'struct etikettInfo' и' class Lagerverwaltung'. И сразу после этого вы повторно объявляете 'class Lagerverwaltung'. Мне кажется, что это плохо. Также: пожалуйста, напишите (соответствующее) сообщение об ошибке. – KompjoeFriek

+1

Сообщение об ошибке находится внутри кода (комментарии). – user2366975

+0

Почему бы не создать файл 'etikettInfo.h', поместите там структуру и включите ее там, где она вам нужна? (ps: denglish силен в вас) – Zaiborg

ответ

0

Как возвышается

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

необходим правильный включает в себя для этого, чтобы быть правильно объявлена ​​структура. Поэтому добавьте

#include <QString> 
#include <QList> 

, а также декларация для properties_content.

1

Also I have been including etikett1.h inside of lagerverwaltung.h

У вас есть ошибка. Вы включаете etikett1.h в lagerverwaltung.h, который включает в себя etikett1.h, который включает в себя lagerverwaltung.h и так далее. Другими словами, у вас есть круговая зависимость. Ваши включенные охранники предотвращают бесконечное включение, но также вызывают включение одного из заголовков перед другим. В этом случае сначала был включен lagerverwaltung.h и до определения чего-либо - etikettInfo в частности - он включает в себя etikett1.h ..., который зависит от etikettInfo, который еще не определен.

Если lagerverwaltung.h действительно зависит от etikett1.h и единственное etikett1.h зависит в lagerverwaltung.h является etikettInfo и ничто в lagerverwaltung.h не зависит от etikettInfo, то самое простое решение разделить определение etikettInfo в другой заголовок и включают в себя, что в etikett1.h вместо lagerverwaltung.h ,

Смежные вопросы