我使用的是Code::Blocks 8.02和mingw5.1.6编译器。当我编译我的Qt项目时,我得到了这个错误:
C:\Documents and Settings\ Fuzz\Desktop\GUI\App_interface.cpp|33|undefined引用` `vtable AddressBook‘
文件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文件AddressBook.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"));
}发布于 2009-10-12 04:51:10
警告:如果您已有.pro文件,请不要执行此操作-否则会丢失该文件!
为了自动确保生成所有moc cpp文件,您可以让qmake自动为您生成.pro文件,而不是自己编写。
跑
qmake -project在项目目录中,qmake将扫描目录中的所有C++头文件和源文件,以便为其生成moc cpp文件。
发布于 2010-07-15 01:21:51
使用Qt Creator时:
运行qmake
发布于 2009-10-12 00:53:18
几乎可以肯定的是,您没有在生成的moc_AddressBook.cpp文件中编译或链接。(它应该已经为您生成了--在编译之前,您正在代码上运行Qt的moc,对吗?)
为了更彻底地回答这个问题,Q_OBJECT宏向Qt的moc工具发出信号,要求它创建一个额外的实现文件,其中包含支持QObject元信息系统所需的代码。
另一种解决方案可能是删除Q_OBJECT宏。您可能不想这样做,但这将有助于解决直接的问题,而且对于您所呈现的代码来说,这并不是严格必要的。
另外,我会注意到您的代码:
#include "addressbook.h"应该是:
#include "AddressBook.h"基于您在问题中显示文件名的方式。
https://stackoverflow.com/questions/1552069
复制相似问题