对 vtable 的未定义引用。试图编译一个 Qt 项目

新手上路,请多包涵

我正在使用 Code::Blocks 8.02 和 mingw 5.1.6 编译器。编译 Qt 项目时出现此错误:

C:\Documents and Settings\The Fuzz\Desktop\GUI\App_interface.cpp|33|undefined reference to `vtable for AddressBook’

文件地址簿.h:

  #ifndef ADDRESSBOOK_H
 #define ADDRESSBOOK_H

 #include <QWidget>

 class QLabel;
 class QLineEdit;
 class QTextEdit;

 class AddressBook : public QWidget
 {
     Q_OBJECT

 public:
     AddressBook(QWidget *parent = 0);

 private:
     QLineEdit *nameLine;
     QTextEdit *addressText;
 };

 #endif

文件地址簿.cpp:

 #include <QtGui>
#include "addressbook.h"

AddressBook::AddressBook(QWidget *parent)
     : QWidget(parent)
{
    QLabel *nameLabel = new QLabel(tr("Name:"));
    nameLine = new QLineEdit;

    QLabel *addressLabel = new QLabel(tr("Address:"));
    addressText = new QTextEdit;

    QGridLayout *mainLayout = new QGridLayout;
    mainLayout->addWidget(nameLabel, 0, 0);
    mainLayout->addWidget(nameLine, 0, 1);
    mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop);
    mainLayout->addWidget(addressText, 1, 1);

    setLayout(mainLayout);
    setWindowTitle(tr("Simple Address Book"));
}

原文由 TheFuzz 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 967
2 个回答

警告:如果您已经有 .pro 文件,请不要这样做 - 您会丢失它!

为了自动确保生成所有的moc cpp文件,你可以让qmake自动为你生成一个.pro文件,而不是自己写一个。

qmake -project

在项目目录中,qmake 将扫描您的目录中的所有 C++ 头文件和源文件以生成 moc cpp 文件。

原文由 blwy10 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 Q_OBJECT 但不生成 moc 文件的最多错误

moc文件定义

类名::元对象

静态元对象

qt_metacall

这是一个例子:

当源或标头使用 Q_OBJECT

/opt/qt/bin/moc ./window.h -o ./moc_window.cpp

Makefile 在 OBJS 中添加 moc_window.o

例如:OBJS=main.o window.o moc_window.o

试试这个来源

https://www.mediafire.com/file/anjeah1jmm07mfe/qt_group_box.tar.gz

参考 http://fatalfeel.blogspot.com/2013/11/qt5-c-building.html

原文由 YU Chen Shih 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题