Das Problem ist, dass Ihre uiEigenschaft eine Vorwärtsdeklaration der Klasse verwendet Ui::MainWindowClass, daher der Fehler "unvollständiger Typ".
Das Einfügen der Header-Datei, in der diese Klasse deklariert ist, behebt das Problem.
BEARBEITEN
Basierend auf Ihrem Kommentar den folgenden Code:
namespace Ui
{
class MainWindowClass;
}
ist nicht eine Klasse deklarieren. Es ist eine Vorwärtsdeklaration , was bedeutet, dass die Klasse irgendwann zum Zeitpunkt der Verknüpfung vorhanden sein wird.
Grundsätzlich teilt es dem Compiler nur mit, dass der Typ vorhanden sein wird und dass er nicht davor warnen sollte.
Aber die Klasse muss irgendwo definiert werden .
Beachten Sie, dass dies nur funktionieren kann, wenn Sie einen Zeiger auf einen solchen Typ haben.
Sie können keine statisch zugewiesene Instanz eines unvollständigen Typs haben.
Entweder möchten Sie tatsächlich einen unvollständigen Typ, und dann sollten Sie Ihr uiMitglied als Zeiger deklarieren :
namespace Ui
{
class MainWindowClass;
}
class MainWindow : public QMainWindow
{
private:
Ui::MainWindowClass * ui;
};
Oder Sie möchten eine statisch zugewiesene Instanz von Ui::MainWindowClass, und dann muss sie deklariert werden. Sie können dies in einer anderen Header-Datei tun (normalerweise gibt es eine Header-Datei pro Klasse).
Aber ändern Sie einfach den Code in:
namespace Ui
{
class MainWindowClass
{};
}
class MainWindow : public QMainWindow
{
private:
Ui::MainWindowClass ui;
};
wird auch funktionieren.
Beachten Sie den Unterschied zwischen den beiden Erklärungen. Der erste verwendet eine Vorwärtsdeklaration, während der zweite die Klasse tatsächlich deklariert (hier ohne Eigenschaften oder Methoden).