2016-02-14 73 views
0

我正在試圖使代碼找到this page編譯。我想要做的就是複製該頁面描述的內容。我不斷收到一個錯誤,指出:簡單的應用程序獲取「未定義引用vtable」錯誤? [Qt]

main.cpp:13: error: undefined reference to `vtable for myMainWindow' 

這裏是我的代碼,這是幾乎完全一樣的頁面代碼:

的main.cpp

#include <QApplication> 
#include <QDialog> 
#include <QWidget> 
#include <QGridLayout> 
#include <QPushButton> 
#include <QMainWindow> 
#include <QBitmap> 

class myMainWindow : public QMainWindow 
{ 

public: 
myMainWindow():QMainWindow() 
    { 
    setMask((new QPixmap("saturn.png"))->mask()); 
     QPalette* palette = new QPalette(); 
     palette->setBrush(QPalette::Background,QBrush(QPixmap("saturn.png"))); 
     setPalette(*palette); 

     setWindowFlags(Qt::FramelessWindowHint); 
     QWidget *centralWidget = new QWidget(this); 
     QGridLayout *layout = new QGridLayout(); 

     centralWidget->setLayout(layout); 

     QPushButton* button1 = new QPushButton("Button 1"); 
     button1->setFixedSize(80,50); 

     layout->addWidget(button1,0,0); 

     setCentralWidget(centralWidget); 
    }; 
    ~myMainWindow(); 
}; 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 
    myMainWindow *window = new myMainWindow(); 

    window->resize(600, 316); 
    window->show(); 
    return app.exec(); 
} 

我讀了爲什麼這可能會發生,並且看到它是需要在頭文件中定義類的東西。我怎麼會這樣做正確給這個代碼?

謝謝。

+1

你是否在某處提供了析構函數的函數體? – Anedar

+0

將頭文件添加到.pro並運行qmake – user3528438

+0

@Anedar,那就是問題所在!謝謝!你可以添加一個答案,所以我可以標記爲完整? – orbit

回答

1

正如評論中所述:〜myMainWindow()的缺失函數體是問題所在。

2

除了缺少析構函數定義之外,您還缺少Q_OBJECT宏,這對於所有QObject派生類都是必需的。如果你有這個問題,當你在main.cpp中定義QObject派生類時,你需要手動包含MOC文件,否則會得到有關MOC生成文件的另一個錯誤。如果您爲QObject派生類使用專用的h和cpp文件,則情況並非如此。

+0

謝謝。我只是想讓這個例子工作,以便我知道它可以完成。我會修改它以符合你在評論/回答中注意到的內容。 – orbit

相關問題