Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Qt 4.4.0 + Code::Blocks 8.02 + MS Vista
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
edwardoid
Исходники
main.cpp
#include <QApplication>
#include <QFont>
#include <QPushButton>
#include "test.h"

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);

    Test t;
    t.show();

    return app.exec();
}



test.h
#ifndef TEST_H
#define TEST_H

#include <QMainWindow.h>


class Test : public QMainWindow
{
    Q_OBJECT
    public:
        Test(QWidget* = NULL);
        virtual ~Test();
    protected:
    private:
};

#endif // TEST_H

test.cpp
#include "test.h"

Test::Test(QWidget* parent): QMainWindow(parent)
{
    //ctor
}

Test::~Test()
{
    //dtor
}


результат компиляции:

-------------- Build: Debug in QTesting ---------------

Linking console executable: bin\Debug\QTesting.exe
obj\Debug\test.o: In function `_ZN4TestC2EP7QWidget':
C:/Users/Edward/Programming/QTesting/test.cpp:4: undefined reference to `vtable for Test'
C:/Users/Edward/Programming/QTesting/test.cpp:4: undefined reference to `vtable for Test'
obj\Debug\test.o: In function `_ZN4TestC1EP7QWidget':
C:/Users/Edward/Programming/QTesting/test.cpp:4: undefined reference to `vtable for Test'
C:/Users/Edward/Programming/QTesting/test.cpp:4: undefined reference to `vtable for Test'
obj\Debug\test.o: In function `_ZN4TestD2Ev':
C:/Users/Edward/Programming/QTesting/test.cpp:9: undefined reference to `vtable for Test'
obj\Debug\test.o:C:/Users/Edward/Programming/QTesting/test.cpp:9: more undefined references to `vtable for Test' follow
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 0 seconds)
6 errors, 0 warnings



Я не пойму почему так? Если убрать Q_OBJECT все скомпилируется, но без этого макроса я не смогу создаватх свои слоты!
Помогите.
Litkevich Yuriy
1) штатные примеры на висте компилятся?
2) не пиши так: #include <QMainWindow.h> пиши имя модуля, а не файла ( #include <QMainWindow>)
3) не NULL, а 0!
4) в pro-файле test.h указан?
edwardoid
1)Все компилит, если нет этого Q_OBJECT.
2) Сорри, не пойму какого хрена написал этот .х
3) Какая разница? Вроде ссылке можно придать значение НУЛЛ
4) наверное, я делал qmake -project и qmake, потом make...
Litkevich Yuriy
Цитата(edwardoid @ 31.7.2008, 20:10) *
3) Какая разница? Вроде ссылке можно придать значение НУЛЛ

сильно не рекомендуют, см. Qt'явые исходники, всюду нуль

Цитата(edwardoid @ 31.7.2008, 20:10) *
4) наверное, я делал qmake -project и qmake, потом make...

провери и выложи pro-файл
void*
edwardoid, ты можешь сначала сгенерировать автоматически файл проекта, а затем добавить туда свои файлы, если qmake их не добавил
edwardoid
QTesting.pro
CODE
###############################################################
#######
# Automatically generated by qmake (2.01a) ??? 1. ??? 20:12:45 2008
######################################################################

TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .

# Input
HEADERS += test.h
SOURCES += main.cpp test.cpp


Цитата(void* @ 31.7.2008, 19:14) *
edwardoid, ты можешь сначала сгенерировать автоматически файл проекта, а затем добавить туда свои файлы, если qmake их не добавил

Как это делается в Code::Blocks?
Sergey B.
Если нет своих слотов, то Q_OBJECT писать не надо.
Когда напишете слоты (объявите), добавите и этот макрос

По этому макросу moc строит таблицу вирьтуальных ф-й, а так как нет слотов она пустая.
Litkevich Yuriy
Цитата(edwardoid @ 31.7.2008, 20:10) *
1)Все компилит, если нет этого Q_OBJECT.

я спрашивал про стандартные примеры (Qt'явые) дело в том, что под висту нужен патченый MinGW32.
---
Уменя твой код копилится без проблем, проверено на Windows 2kSP4, Qt-4.4.0, gcc (GCC) 3.4.5 (mingw special)
edwardoid
Цитата(Litkevich Yuriy @ 31.7.2008, 21:49) *
Цитата(edwardoid @ 31.7.2008, 20:10) *
1)Все компилит, если нет этого Q_OBJECT.

я спрашивал про стандартные примеры (Qt'явые) дело в том, что под висту нужен патченый MinGW32.
---
Уменя твой код копилится без проблем, проверено на Windows 2kSP4, Qt-4.4.0, gcc (GCC) 3.4.5 (mingw special)

Как пропатчить?
Litkevich Yuriy
1) как ставил Qt на висту? (программу установки использовал или собирал из исходников)
2) как MinGW ставил? (откуда и что брал)
edwardoid
1) QT через инсталяционник. Вместо скачки MinGW указал эту директорию у Code::Blocks
2) Code::Blocks сам поставил.
===
Есть версия MinGW которая будет строить как 64битные версии, так и 32-ух битные. И вообще, имееет ли смысл компилировать разные версии для разных разрядностей процессора, если не,т то почему?
Litkevich Yuriy
Цитата(edwardoid @ 1.8.2008, 5:06) *
Есть версия MinGW которая будет строить как 64битные версии, так и 32-ух битные.

Эту похоже патчить не надо, но на всякий случай смотри тут GCC Version 3 в старых сборках есть файлы помеченые как *-vista их переименовываешь, удаляя приписку виста, и вместо основных кладешь.
версию GCC можно посмотреть так:
gcc --version

Цитата(edwardoid @ 1.8.2008, 5:06) *
если не,т то почему?

а зачем тебе лишняя работа, собирай 32-х битную и все.

Теперь еще скажи, ты отладочные библиотеки Qt собрал?
edwardoid
но тем не менее проблема не решена. вроде гцц гормалный. qt не собирал, инсталляционник был...
trdm
А это что за фигня?
Цитата(edwardoid @ 31.7.2008, 13:44) *
Test(QWidget* = NULL);

может лучше
Test(QWidget* parent = NULL);
Litkevich Yuriy
trdm, :) а у меня его пример без исправлений компилится :)
edwardoid
Цитата(trdm @ 1.8.2008, 22:55) *
А это что за фигня?
Цитата(edwardoid @ 31.7.2008, 13:44) *
Test(QWidget* = NULL);

может лучше
Test(QWidget* parent = NULL);

Если ты о test.h, то навания переменных я не обязан указывать в прототипе функции. Это стандарт. Главное указать тип. Что я и сделал. Так, что это непричем.
Litkevich Yuriy
edwardoid, ты лучше ответь на мой вопрос, отладочные библиотеки собирал или еще нет?
void*
Цитата(trdm @ 1.8.2008, 20:55) *
может лучше
Test(QWidget* parent = NULL);

нет, в объявлениях не обязательно указывать имена переменных, достаточно только указания типа, хотя конечно действительно лучше использовать простой ноль (0) вместо NULL

упс, опоздал :)
trdm
Цитата(edwardoid @ 1.8.2008, 22:06) *
Если ты о test.h, то навания переменных я не обязан указывать в прототипе функции. Это стандарт. Главное указать тип. Что я и сделал. Так, что это непричем.

стандарт, это понятно.
Я просто намекал на препроцессорную подготовку. может там это важно...
edwardoid
ne pomoglo...
ViGOur
Цитата(edwardoid @ 1.8.2008, 9:04) *
qt не собирал, инсталляционник был...
А ты уверен, что в инсталяшке именно сборка для Vista?
Может проще всетаки самому руками собрать?
edwardoid
Цитата(ViGOur @ 4.8.2008, 12:37) *
Цитата(edwardoid @ 1.8.2008, 9:04) *
qt не собирал, инсталляционник был...
А ты уверен, что в инсталяшке именно сборка для Vista?
Может проще всетаки самому руками собрать?

Что Вистовская весия? комилятор или библиотека?
ViGOur
Библиотека.
Litkevich Yuriy
edwardoid, попробуй отладочную версию собрать:
"Пуск" -> "Программы" -> "Qt 4.4.*****" -> "Qt 4.4.* (Build Debug Libraries)"
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.