본문 바로가기

QT/Tip / Information

QT undefined reference to 'vtable for...'

QT로 모달형식의 다이얼로그를 띄우기 위해 소스를 구현을 하다가
에러에 대해서 이해 한 부분이 있어서 이렇게 글을 쓰게 되었다.

먼저 이 에러가 발생된 이유는 시그널, 슬롯을 사용하면서, Q_OBJCET를 사용하지 않고 빌드를 시킨 뒤에 
실행을 시켰지만 출력이 되지 않아 확인하니 Q_OBJECT를 사용하지 않았다는 것을 알게되어
Q_OBJCET를 추가 하였는데, undefined reference to 'vtable for...'가 발생되었다.
이 에러를 보게 되면,

이런식의 undefined reference to 'vtable for...'에 관한 에러가 뜨게 되었다.
그래서 바로 인터넷 검색을 하였는데,
이 에러는 Q_OBJECT 때문에 발생하는 에러라고 하는데,
시그널, 슬롯을 사용하지 않았으면서 Q_OBJECT를 사용하면 출력되는 에러라고 하였다.
하지만 난 밑의 소스 처럼 시그널, 슬롯을 사용하였다.

/****************************************
            helloQT.h
****************************************/
#ifndef HELLOQT_H
#define HELLOQT_H

#include 
#include 

class Hello : public QDialog
{
    Q_OBJECT
public:
    Hello(QWidget *parent = 0);
private:
    QPushButton *button;
};

#endif // HELLOQT_H

/****************************************
            helloQT.cpp
****************************************/
#include"helloQT.h"
#include

Hello::Hello(QWidget *parent) : QDialog(parent)
{
    button = new QPushButton;

    button->setText("Hello");
    button->show();

    QHBoxLayout *layout = new QHBoxLayout;
    layout->addWidget(button);
    setLayout(layout);


    connect(button, SIGNAL(clicked()), this, SLOT(close()));
}



그래서 뭐가 문제 일까? 라는 생각을 하다가 Q_OBJECT를 추가 하게 되면, moc파일이 생성이 되어야 되는데,
생성은 qmake로 생성을 해 주어야 되는데, qmake를 해 주질 않아서 위에러가 발생했을 수 있다는 생각을 하게 되었다.
그래서,



위그림에 있는 [Build] - [Run qmake]를 실행한뒤 Ctrl+R를 누르니
에러 없이 실행이 되었다.


'QT > Tip / Information' 카테고리의 다른 글

우분투10.04 LTS에 QT4.6.2 phonon 포함 설치  (0) 2010.05.11
시그널(signals)과 슬롯(slots)  (1) 2009.04.29
위젯(widget) 이란?  (0) 2009.04.29