首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对vtable的引用未定义。尝试编译Qt项目

对vtable的引用未定义。尝试编译Qt项目
EN

Stack Overflow用户
提问于 2009-10-11 23:25:57
回答 19查看 87.8K关注 0票数 55

我使用的是Code::Blocks 8.02和mingw5.1.6编译器。当我编译我的Qt项目时,我得到了这个错误:

C:\Documents and Settings\ Fuzz\Desktop\GUI\App_interface.cpp|33|undefined引用` `vtable AddressBook‘

文件AddressBook.h:

代码语言:javascript
运行
复制
 #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

文件AddressBook.cpp:

代码语言:javascript
运行
复制
#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"));
}
EN

回答 19

Stack Overflow用户

回答已采纳

发布于 2009-10-12 04:51:10

警告:如果您已有.pro文件,请不要执行此操作-否则会丢失该文件!

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

代码语言:javascript
运行
复制
qmake -project

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

票数 47
EN

Stack Overflow用户

发布于 2010-07-15 01:21:51

使用Qt Creator时:

运行qmake

  • Build→Rebuild

  1. Build→Run qmake
  2. Build→→Rebuild All All
票数 51
EN

Stack Overflow用户

发布于 2009-10-12 00:53:18

几乎可以肯定的是,您没有在生成的moc_AddressBook.cpp文件中编译或链接。(它应该已经为您生成了--在编译之前,您正在代码上运行Qt的moc,对吗?)

为了更彻底地回答这个问题,Q_OBJECT宏向Qt的moc工具发出信号,要求它创建一个额外的实现文件,其中包含支持QObject元信息系统所需的代码。

另一种解决方案可能是删除Q_OBJECT宏。您可能不想这样做,但这将有助于解决直接的问题,而且对于您所呈现的代码来说,这并不是严格必要的。

另外,我会注意到您的代码:

代码语言:javascript
运行
复制
#include "addressbook.h"

应该是:

代码语言:javascript
运行
复制
#include "AddressBook.h"

基于您在问题中显示文件名的方式。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1552069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档