1

问题:我有一个包含打印机类“apppprinter”的程序,但是在尝试编译时出现错误:

appprinter.cpp:(.text+0x105): undefined reference to `vtable for appprinter'
appprinter.cpp:(.text+0x10d): undefined reference to `vtable for appprinter'
appprinter.o: In function `appprinter::printIt()':
make: Leaving directory `/home/michael/projectOOI/HerkansingProjectOOI-build-desktop-Desktop_Qt_4_8_1_for_GCC__Qt_SDK__Release'
appprinter.cpp:(.text+0x17f): undefined reference to `appprinter::staticMetaObject'
appprinter.cpp:(.text+0x1e0): undefined reference to `appprinter::staticMetaObject'
appprinter.cpp:(.text+0x23d): undefined reference to `appprinter::staticMetaObject'
appprinter.cpp:(.text+0x3ab): undefined reference to `appprinter::staticMetaObject'
collect2: ld returned 1 exit status

头文件:

#ifndef APPPRINTER_H
#define APPPRINTER_H
#include<QObject>
#include<QWidget>
#include <QMap>
#include <QComboBox>
#include <QCalendarWidget>
#include <QRadioButton>
#include <QString>
#include <QtGui>
#include "appointment.h"

class appprinter : public QWidget
{
    Q_OBJECT
public:
    appprinter(QWidget * parent = 0, int i = 0, int option = 0);
    ~appprinter(){}
    void setList(QList<appointment> param) {goTo = param; printIt();}
    void printIt();
public slots:
    void goNext() {showIter++; this->close();appprinter * help = new appprinter(this,showIter);help->setList(goTo); help->show();}
    void goPrev() {showIter--; this->close();appprinter * help = new appprinter(this,showIter);help->setList(goTo); help->show();}
private:
    int showIter;
    QList<appointment> goTo;
    bool isUnder;
    int opt;
};

#endif // appprinter_H

cpp文件:

#include "appprinter.h"

appprinter::appprinter(QWidget * parent, int i, int option)
        : QWidget(parent)
{
    showIter = i;
    if (option == 0);//needs further building

}

void appprinter::printIt()
{
    QList<appointment> list = goTo;
    int i = showIter;
    QPushButton * showNext = new QPushButton(tr("Next"));
    connect(showNext,SIGNAL(clicked()),this,SLOT(goNext()));
    QPushButton * showPrev = new QPushButton(tr("Previous"));
    connect(showPrev,SIGNAL(clicked()),this,SLOT(goPrev()));
    QPushButton * closer = new QPushButton(tr("Close"));
    connect(closer,SIGNAL(clicked()),this,SLOT(close()));

    QGridLayout * lay = new QGridLayout;
    int counter = 0;
    QLabel * pTitle = new QLabel;
    QTextEdit * pDescription = new QTextEdit;
    QLabel * pDeadline = new QLabel;
    QLabel * pDeadlineTime = new QLabel;
    QLabel * pPriority = new QLabel;
    QLabel * pStatus = new QLabel;
    QLabel * emptyList = new QLabel(tr("No search results!"));

    if (list.count() != 0)
    {
        pTitle->setText(list[i].ShowTitle());
        pDescription->setText(list[i].ShowDescription());
        pDeadline->setText(list[i].ShowDate().toString());
        pDeadlineTime->setText(list[i].ShowStart().toString());
        if (i+1 >= list.count())
            showNext->hide();
        else
            showNext->show();
        if (i <= 0)
            showPrev->hide();
        else
            showPrev->show();
        lay->addWidget(pTitle,counter++,0);
        lay->addWidget(pDescription,counter++,0);
        lay->addWidget(pDeadline,counter++,0);
        lay->addWidget(pDeadlineTime,counter++,0);
        lay->addWidget(pPriority,counter++,0);
        lay->addWidget(pStatus,counter++,0);
        lay->addWidget(showPrev,counter,0,Qt::AlignLeft);
        lay->addWidget(showNext,counter,0,Qt::AlignRight);
        lay->addWidget(closer,++counter,0,Qt::AlignCenter);
        this->setFixedHeight(320);
    }
    else
    {
        lay->addWidget(emptyList,0,0);
        lay->addWidget(closer,1,0,Qt::AlignCenter);
        this->setFixedHeight(240);
    }
    setLayout(lay);

    if (list.count() != 0)
        setWindowTitle(list[i].ShowTitle());
}

有人知道解决方案吗??

4

1 回答 1

8

每当你遇到这种情况时,总是做一个cleanqmake然后重建。除非您遇到其他问题,例如缺少Q_OBJECT或未实现的纯虚拟,否则它会修复。

于 2012-08-20T10:24:34.347 回答