Проблема полягає в тому, що у вашому uiресурсі використовується пряме оголошення класу Ui::MainWindowClass, звідси помилка "неповний тип".
Включення файлу заголовка, у якому оголошено цей клас, вирішить проблему.
РЕДАГУВАТИ
На основі вашого коментаря, такий код:
namespace Ui
{
class MainWindowClass;
}
це НЕ оголосити клас. Це пряма декларація , що означає, що клас буде існувати в певний момент, під час зв’язку.
По суті, він просто повідомляє компілятору, що тип буде існувати, і що він не повинен про це попереджати.
Але клас потрібно десь визначити .
Зауважте, це може працювати, лише якщо у вас є вказівник на такий тип.
Ви не можете мати статично виділений екземпляр неповного типу.
Отже, ви насправді хочете неповний тип, і тоді вам слід оголосити свого uiчлена як покажчик:
namespace Ui
{
class MainWindowClass;
}
class MainWindow : public QMainWindow
{
private:
Ui::MainWindowClass * ui;
};
Або ви хочете статично виділений екземпляр Ui::MainWindowClass, а потім його потрібно оголосити. Ви можете зробити це в іншому файлі заголовка (зазвичай у кожному класі є один файл заголовка).
Але просто змінивши код на:
namespace Ui
{
class MainWindowClass
{};
}
class MainWindow : public QMainWindow
{
private:
Ui::MainWindowClass ui;
};
також буде працювати.
Зверніть увагу на різницю між двома деклараціями. Перший використовує пряме оголошення, тоді як другий фактично оголошує клас (тут без властивостей і методів).