Автор Гілка: Qt код чомусь не лінкуєтся  (Прочитано 3578 раз)

Відсутній Паша

  • Кореспондент
  • ***
  • дописів: 142
  • Карма: +0/-0
  • хайо!
Добрий день.
Я не професійний програміст. Так, аматор. Зараз вивчаю Qt. І ось проблема на порожньому місці.
Код ось такий простенький....
Цитата
#include<qapplication.h>
#include<qpushbutton.h>
#include<iostream>


class ttest: public QObject
{
        Q_OBJECT

        public:
                ttest(QObject* parent=0, const char* name=0)
                {
                        std::cout << "hello world" << std::endl;
                }
                
                ~ttest()
                {
                        std::cout << "bye" << std::endl;
                }
        public slots:
                void hw(void)
                {
                        std::cout << "hello world" << std::endl;
                }
};

int main(int argn, char** argv)
{
        QApplication app(argn,argv);
        QPushButton* button = new QPushButton("hello world",0);
        ttest* foo = new ttest(button);
        
        QObject::connect(button,SIGNAL(clicked()),foo,SLOT(hw()));
        
        app.setMainWidget(button);
        button->setCaption("hello world");
        button->show();
        return app.exec();
}
... але чомусь при компіляції пише
Цитата
g++  -o 3 main.o    -L/usr/share/qt3/lib -L/usr/X11R6/lib -lqt -lXext -lX11 -lm
main.o(.text+0xb9): In function `main':
: undefined reference to `vtable for ttest'
collect2: ld returned 1 exit status
make: *** [3] Error 1
Що це за vtable такий? може хто знає.
Дякую.
debian

Відсутній DalekiyObriy

  • Літератор
  • ******
  • дописів: 1929
  • Карма: +5/-0
Re: Qt код чомусь не лінкуєтся
« Відповідей #1 : 2006-10-20 15:49:01 »
потрібно зробити moc-файл (moc myfile.cpp -o myfile.moc)
і включити його в cpp (#include "mycode.moc")

P.S. vtable - це таблиця віртуальних методів для ваших класів C++
http://en.wikipedia.org/wiki/Vtable
Fedora 35 (x86-64)

zzandy

  • Гість
Re: Qt код чомусь не лінкуєтся
« Відповідей #2 : 2006-10-20 16:00:58 »
Там, здається, треба спочатку qmake запустити.

Відсутній Паша

  • Кореспондент
  • ***
  • дописів: 142
  • Карма: +0/-0
  • хайо!
Re: Qt код чомусь не лінкуєтся
« Відповідей #3 : 2006-10-23 10:05:50 »
Якщо "інклюдить" moc файл, тоді:
Цитата
lpi@comp18-1:~/apps/cpp/3$ make
g++ -c -pipe -Wall -W -O2  -DQT_NO_DEBUG -DQT_SHARED -I/usr/share/qt3/mkspecs/default -I. -I. -I/usr/include/qt3 -o main.o main.cpp
In file included from main.cpp:1:
main.moc:20: error: syntax error before `::' token
main.moc:25: error: syntax error before `::' token
main.moc:26: error: `ttest' was not declared in this scope
main.moc:26: error: parse error before `::' token
main.moc:29: error: syntax error before `::' token
main.moc:37: error: syntax error before `::' token
main.moc:48: error: syntax error before `::' token
main.moc:57: error: ISO C++ forbids declaration of `metaObj' with no type
main.moc:65: error: invalid conversion from `QMetaObject*' to `int'
main.moc:66: error: syntax error before `.' token
main.moc:70: error: syntax error before `::' token
main.moc:77: error: syntax error before `::' token
main.moc:87: error: syntax error before `::' token
main.moc:93: error: syntax error before `::' token
main.moc:98: error: syntax error before `::' token
main.moc:26: warning: `QMetaObjectCleanUp cleanUp_ttest(...)' declared `static'
   but never defined
make: *** [main.o] Error 1
тобто вона навіть не компілюється :(.

qmake я з самого початку використовував. Спочатку qmake -project, потім просто qmake. А тоді make.

Може в мене щось з інлюд файлами не те? Хоча приклади з документації компілюються без проблем.
Досі не зною що робити.
debian

Відсутній DalekiyObriy

  • Літератор
  • ******
  • дописів: 1929
  • Карма: +5/-0
Re: Qt код чомусь не лінкуєтся
« Відповідей #4 : 2006-10-23 18:53:53 »
main.moc потрібно включати в кінці файла:

tail test.cpp
QObject::connect(button,SIGNAL(clicked()),foo,SLOT(hw()));

app.setMainWidget(button);
button->setCaption("hello world");
button->show();
return app.exec();
}

#include "test.moc"

після цього ваш приклад у мене компілюється без питань:
$ g++  test.cpp -L/usr/share/qt3/lib -L/usr/X11R6/lib -I/usr/lib/qt3/include -lqt-mt -lX11 -L/usr/lib/qt3/lib64
$
Fedora 35 (x86-64)

Відсутній Паша

  • Кореспондент
  • ***
  • дописів: 142
  • Карма: +0/-0
  • хайо!
Re: Qt код чомусь не лінкуєтся
« Відповідей #5 : 2006-10-24 08:24:07 »
Нарешті запрацювало! Дякую :))
debian