2016-02-14 74 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

相关问题