Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Day от Январь 14, 2012, 14:53



Название: undefined reference to `vtable for MClas'
Отправлено: Day от Январь 14, 2012, 14:53
Вот решил попробовать себя в самостоятельном творчестве
И получил такую ошибку
Код:
release/main.o:main.cpp:(.text+0xcb): undefined reference to `vtable for MClas'
collect2: ld returned 1 exit status
Уж и проект чистил (и из среды "Очистить проект" и просто ручками, удалив все, кроме pro, cpp, h
Сдаюсь и прошу помощи

main.h
Код:
#ifndef _Main_h_
#define _Main_h_

#include <QObject>

class MClas : public QObject {
    Q_OBJECT
public:
    MClas() : QObject() { }
    QWidget      wgt;
public slots:
    void ShowKvadr();
    void MClock();
    void Pict();
};
#endif

main.cpp
Код:
#include <QtGui>
#include "main.h"
//-------
  MClas *Mc;
// --------------------------------
int main(int argc, char** argv)
{
    QApplication app(argc, argv);
    Mc = new MClas();
    QPushButton B1("1", &Mc->wgt);
    QPushButton B2("2", &Mc->wgt);
    QPushButton B3("2", &Mc->wgt);
    QObject::connect(&B1, SIGNAL(clicked()),
                     Mc, SLOT(ShowKvadr()));
    QObject::connect(&B2, SIGNAL(clicked()),
                     Mc, SLOT(MClock()));
    QObject::connect(&B3, SIGNAL(clicked()),
                     Mc, SLOT(Pict()));
    Mc->wgt.resize(800, 600);
    Mc->wgt.show();
    return app.exec();
}
/**************/
void MClas::ShowKvadr()
{
}
/******************/
void MClas::MClock()
{
}
/******************/
void MClas::Pict()
{
}
/[code]
[/code]


Название: Re: undefined reference to `vtable for MClas'
Отправлено: BRE от Январь 14, 2012, 14:55
Запусти qmake.


Название: Re: undefined reference to `vtable for MClas'
Отправлено: Day от Январь 14, 2012, 15:07
Запусти qmake.
Тоже самое


Название: Re: undefined reference to `vtable for MClas'
Отправлено: kambala от Январь 14, 2012, 15:34
как-то ты хитро пишешь, я бы даже сказал через одно место :)

если ты хочешь свой виджет, то надо сразу и наследоваться от QWidget, и все визуальные элементы и коннекты создавать в его конструкторе. и желательно иметь 2 отдельных файла для класса, а мэин пусть себе сидит в своём main.cpp - в нём вообще помимо создания объекта QApplication обычно только создают и показывают свой основной виджет и всё.


Название: Re: undefined reference to `vtable for MClas'
Отправлено: mutineer от Январь 14, 2012, 15:49
Код
C++ (Qt)
QPushButton B1("1", &Mc->wgt);
QPushButton B2("2", &Mc->wgt);
QPushButton B3("2", &Mc->wgt);

Не стоит давать стековым объектам Qt-шного родителя, может привести к печальным последствиям


Название: Re: undefined reference to `vtable for MClas'
Отправлено: mutineer от Январь 14, 2012, 15:56
А по сути ошибки, послушай камбалу - вынеси реализацию класса в отдельный файл. То есть у тебя должно быть три файла: main.cpp, MClas.h, MClas.cpp


Название: Re: undefined reference to `vtable for MClas'
Отправлено: Day от Январь 15, 2012, 13:06
Код
C++ (Qt)
QPushButton B1("1", &Mc->wgt);
QPushButton B2("2", &Mc->wgt);
QPushButton B3("2", &Mc->wgt);
Не стоит давать стековым объектам Qt-шного родителя, может привести к печальным последствиям
Виноват, исправился.
А по сути ошибки, послушай камбалу - вынеси реализацию класса в отдельный файл. То есть у тебя должно быть три файла: main.cpp, MClas.h, MClas.cpp
Послушался, но по-началу толку не было. Посмотрел кой какие статьи, стал крутить все ручки (уже истерика) - и получилось!
В числе прочего поставил перед конструктором класса explicit. Может быть не это помогло, а всякие INCLUDEPATH +=, HEDERS +=, но во всяком случае не помешало