1. 程式人生 > >解決QT:forward declaration of 'struct Ui::xxx';invalid use of incomplete struct "Ui::Widget" 等莫名奇異錯誤

解決QT:forward declaration of 'struct Ui::xxx';invalid use of incomplete struct "Ui::Widget" 等莫名奇異錯誤

執行 center dex text nco jsb ims complete class

今天在進行QT Widget的UI設計時,改了下Widget的對象名,然後在多次成功編譯執行後,執行清理,又一次構建,就出現了好多莫名奇異的錯誤:

widget.h:12: 錯誤:forward declaration of ‘struct Ui::Widget‘

widget.cpp:8: 錯誤:invalid use of incomplete type ‘struct Ui::Widget‘

技術分享

網上搜索發現是每當你新鍵一個 QT設計界面, QT會自己主動生成yyy.ui文件,如Widget.ui,因為我直接新建的GUI程序,同一時候也生成了相應的類。Widget,這時我改變了UI的對象名。類裏卻仍然使用了Widget這個類名。因此會導致出錯。


解決方法是,先把有moc生成的ui_widget.h(與xxx.ui相應的)刪掉。然後將界面的對象名設置為,

namespace Ui {

class Widget;

}

中相應的類名。

也就時:ui中將這個uiwidget或者dialog或者mainwindow的名字改動為錯誤裏提及的“struct Ui::Widget”中的Widget。總之。要保持ui文件裏class項的值與uiwidgetdialogmainwindowObjectName同樣

解決QT:forward declaration of 'struct Ui::xxx';invalid use of incomplete struct "Ui::Widget" 等莫名奇異錯誤