Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 简单应用程序获取“;未定义对vtable的引用;错误?[Qt]_C++_Qt - Fatal编程技术网

C++ 简单应用程序获取“;未定义对vtable的引用;错误?[Qt]

C++ 简单应用程序获取“;未定义对vtable的引用;错误?[Qt],c++,qt,C++,Qt,我试图使代码在编译时找到。我想做的就是复制该页面描述的内容。我一直收到一个错误,上面写着: main.cpp:13: error: undefined reference to `vtable for myMainWindow' 这是我的代码,与该页面上的代码非常相似: main.cpp #include <QApplication> #include <QDialog> #include <QWidget> #include <QGridLayout

我试图使代码在编译时找到。我想做的就是复制该页面描述的内容。我一直收到一个错误,上面写着:

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();
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
类myMainWindow:公共QMainWindow
{
公众:
myMainWindow():QMainWindow()
{
setMask((新的QPixmap(“saturn.png”)->mask();
Qpalete*调色板=新的Qpalete();
调色板->镶嵌(Qpalete::Background,QBrush(QPixmap(“saturn.png”));
设置调色板(*调色板);
setWindowFlags(Qt::FramelessWindowHint);
QWidget*centralWidget=新的QWidget(此);
QGridLayout*布局=新的QGridLayout();
centralWidget->setLayout(布局);
QPushButton*button1=新的QPushButton(“按钮1”);
按钮1->设置固定尺寸(80,50);
布局->添加小部件(按钮1,0,0);
setCentralWidget(centralWidget);
};
~myMainWindow();
};
int main(int argc,char*argv[])
{
QApplication应用程序(argc、argv);
myMainWindow*window=新的myMainWindow();
窗口->调整大小(600316);
窗口->显示();
返回app.exec();
}

我仔细阅读了为什么会发生这种情况,并发现这是因为需要在头文件中定义类。考虑到这段代码,我该如何正确地执行此操作?

如注释中所述:~myMainWindow()缺少函数体是问题所在。

如注释中所述:~myMainWindow()缺少函数体是问题所在。

除了缺少析构函数定义之外,您还缺少
Q_对象
宏,该宏对于所有
QObject
派生类都是必需的。如果您有这样的错误,您将得到另一个关于MOC生成文件的错误,当您在
main.cpp
中定义
QObject
派生类时,您需要手动包含MOC文件。如果对
QObject
派生类使用专用的h和cpp文件,则情况并非如此。

除了缺少析构函数定义外,还缺少
Q\u对象
宏,这是所有
QObject
派生类必须使用的宏。如果您有这样的错误,您将得到另一个关于MOC生成文件的错误,当您在
main.cpp
中定义
QObject
派生类时,您需要手动包含MOC文件。如果对
QObject
派生类使用专用的h和cpp文件,则情况并非如此。

是否在某个地方为析构函数提供了函数体?将头添加到.pro并运行qmake是否在某个地方为析构函数提供了函数体?将头添加到.pro并运行qmake谢谢。我只是想让这个例子起作用,让我知道它是可以做到的。我将修改它以符合您在评论/回答中指出的内容。谢谢。我只是想让这个例子起作用,让我知道它是可以做到的。我将对其进行修改,以符合您在评论/回答中指出的内容。