Qt中'incomplete type is not allowed'错误修复求助
我正在尝试用Qt制作一个简单的GUI,需要实现一个ChooseModeGUI窗口,通过点击两个按钮中的一个来选择模式。我拥有的文件如下:
ChooseModeGUI.ui AdministratorGUI.ui UserGUI.ui ChooseModeGUI.h AdministratorGUI.h UserGUI.h ChooseModeGUI.cpp AdministratorGUI.cpp UserGUI.cpp
在ChooseModeGUI.cpp文件中出现了**"incomplete type is not allowed"**错误,错误位于第6行的ui(new Ui::ChooseModeGUI)代码处。
相关代码如下:
ChooseModeGUI.h
#include <qwidget.h> #include <qlistwidget.h> #include <qlineedit.h> #include <qlabel.h> #include <qpushbutton.h> #include "GUI/Source/Headers/AdministratorGUI.h" #include "GUI/Source/Headers/UserGUI.h" #include "Controller/Controller.h" #include "string" QT_BEGIN_NAMESPACE namespace Ui { class ChooseModeGUI; } QT_END_NAMESPACE class ChooseModeGUI : public QWidget { Q_OBJECT private: QLabel* label; QPushButton* userModeButton; QPushButton* administratorModeButton; public: explicit ChooseModeGUI(QWidget* parent = nullptr); private: Ui::ChooseModeGUI* ui; void UserModeButtonHandler(); void AdministratorModeButtonHandler(); };
ChooseModeGUI.cpp
#include "GUI/Source/Headers/ChooseModeGUI.h" #include "QMessageBox" #include "ui_ChooseModeGUI.h" ChooseModeGUI::ChooseModeGUI(QWidget* parent) : QWidget(parent), ui(new Ui::ChooseModeGUI) { ui->setupUi(this); } void ChooseModeGUI::UserModeButtonHandler() { } void ChooseModeGUI::AdministratorModeButtonHandler() { }
这个错误的核心是编译器无法获取Ui::ChooseModeGUI的完整定义,可通过以下方式修复:
检查自动生成文件的路径与存在性
Qt的.ui文件需要通过uic工具生成对应的ui_*.h文件。确认ChooseModeGUI.ui已正确编译生成ui_ChooseModeGUI.h,且cpp文件中#include "ui_ChooseModeGUI.h"的路径与该文件实际路径匹配,路径错误则修改为正确的相对/绝对路径。清理并重新构建项目
缓存异常可能导致生成文件失效。在Qt Creator中依次执行"构建"->"清理项目",再执行"构建"->"构建项目",让uic重新生成ui_ChooseModeGUI.h。调整头文件包含顺序
将#include "ui_ChooseModeGUI.h"移到#include "GUI/Source/Headers/ChooseModeGUI.h"之前,确保编译器先读取到Ui::ChooseModeGUI的完整定义。验证UI文件的对象名
打开ChooseModeGUI.ui,检查Qt Designer中窗口的"对象名"是否为ChooseModeGUI——uic生成的Ui::ChooseModeGUI类名与UI文件的对象名绑定,不匹配会导致定义缺失。
内容的提问来源于stack exchange,提问作者DanLaurentiu

