crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
edwardoid
  опции профиля:
сообщение 31.7.2008, 12:44
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

Спасибо сказали: 0 раз(а)




Репутация:   0  


Исходники
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 все скомпилируется, но без этого макроса я не смогу создаватх свои слоты!
Помогите.
Причина редактирования: длинные исходники можно вкладывать внутрь тэга expad
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 31.7.2008, 15:51
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


1) штатные примеры на висте компилятся?
2) не пиши так: #include <QMainWindow.h> пиши имя модуля, а не файла ( #include <QMainWindow>)
3) не NULL, а 0!
4) в pro-файле test.h указан?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
edwardoid
  опции профиля:
сообщение 31.7.2008, 16:10
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

Спасибо сказали: 0 раз(а)




Репутация:   0  


1)Все компилит, если нет этого Q_OBJECT.
2) Сорри, не пойму какого хрена написал этот .х
3) Какая разница? Вроде ссылке можно придать значение НУЛЛ
4) наверное, я делал qmake -project и qmake, потом make...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 31.7.2008, 16:15
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(edwardoid @ 31.7.2008, 20:10) *
3) Какая разница? Вроде ссылке можно придать значение НУЛЛ

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

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

провери и выложи pro-файл
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
void*
  опции профиля:
сообщение 31.7.2008, 17:14
Сообщение #5


Программист-самоучка
***

Группа: Участник
Сообщений: 429
Регистрация: 4.6.2008
Пользователь №: 193

Спасибо сказали: 28 раз(а)




Репутация:   3  


edwardoid, ты можешь сначала сгенерировать автоматически файл проекта, а затем добавить туда свои файлы, если qmake их не добавил
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
edwardoid
  опции профиля:
сообщение 31.7.2008, 18:26
Сообщение #6


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

Спасибо сказали: 0 раз(а)




Репутация:   0  


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.
  опции профиля:
сообщение 31.7.2008, 18:58
Сообщение #7


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 12.2.2008
Пользователь №: 92

Спасибо сказали: 1 раз(а)




Репутация:   0  


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

По этому макросу moc строит таблицу вирьтуальных ф-й, а так как нет слотов она пустая.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 31.7.2008, 19:49
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(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
  опции профиля:
сообщение 31.7.2008, 22:05
Сообщение #9


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(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
  опции профиля:
сообщение 31.7.2008, 23:35
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


1) как ставил Qt на висту? (программу установки использовал или собирал из исходников)
2) как MinGW ставил? (откуда и что брал)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
edwardoid
  опции профиля:
сообщение 1.8.2008, 1:06
Сообщение #11


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

Спасибо сказали: 0 раз(а)




Репутация:   0  


1) QT через инсталяционник. Вместо скачки MinGW указал эту директорию у Code::Blocks
2) Code::Blocks сам поставил.
===
Есть версия MinGW которая будет строить как 64битные версии, так и 32-ух битные. И вообще, имееет ли смысл компилировать разные версии для разных разрядностей процессора, если не,т то почему?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.8.2008, 5:06
Сообщение #12


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(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
  опции профиля:
сообщение 1.8.2008, 8:04
Сообщение #13


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

Спасибо сказали: 0 раз(а)




Репутация:   0  


но тем не менее проблема не решена. вроде гцц гормалный. qt не собирал, инсталляционник был...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
trdm
  опции профиля:
сообщение 1.8.2008, 20:55
Сообщение #14


Дмитрий Трошин
****

Группа: Участник
Сообщений: 575
Регистрация: 12.1.2008
Пользователь №: 68

Спасибо сказали: 21 раз(а)




Репутация:   6  


А это что за фигня?
Цитата(edwardoid @ 31.7.2008, 13:44) *
Test(QWidget* = NULL);

может лучше
Test(QWidget* parent = NULL);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.8.2008, 21:00
Сообщение #15


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


trdm, :) а у меня его пример без исправлений компилится :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
edwardoid
  опции профиля:
сообщение 1.8.2008, 21:06
Сообщение #16


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(trdm @ 1.8.2008, 22:55) *
А это что за фигня?
Цитата(edwardoid @ 31.7.2008, 13:44) *
Test(QWidget* = NULL);

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

Если ты о test.h, то навания переменных я не обязан указывать в прототипе функции. Это стандарт. Главное указать тип. Что я и сделал. Так, что это непричем.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.8.2008, 21:10
Сообщение #17


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


edwardoid, ты лучше ответь на мой вопрос, отладочные библиотеки собирал или еще нет?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
void*
  опции профиля:
сообщение 1.8.2008, 21:10
Сообщение #18


Программист-самоучка
***

Группа: Участник
Сообщений: 429
Регистрация: 4.6.2008
Пользователь №: 193

Спасибо сказали: 28 раз(а)




Репутация:   3  


Цитата(trdm @ 1.8.2008, 20:55) *
может лучше
Test(QWidget* parent = NULL);

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

упс, опоздал :)

Сообщение отредактировал void* - 1.8.2008, 21:11
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
trdm
  опции профиля:
сообщение 3.8.2008, 22:39
Сообщение #19


Дмитрий Трошин
****

Группа: Участник
Сообщений: 575
Регистрация: 12.1.2008
Пользователь №: 68

Спасибо сказали: 21 раз(а)




Репутация:   6  


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

стандарт, это понятно.
Я просто намекал на препроцессорную подготовку. может там это важно...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
edwardoid
  опции профиля:
сообщение 3.8.2008, 22:44
Сообщение #20


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

Спасибо сказали: 0 раз(а)




Репутация:   0  


ne pomoglo...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 4.8.2008, 10:37
Сообщение #21


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(edwardoid @ 1.8.2008, 9:04) *
qt не собирал, инсталляционник был...
А ты уверен, что в инсталяшке именно сборка для Vista?
Может проще всетаки самому руками собрать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
edwardoid
  опции профиля:
сообщение 4.8.2008, 10:49
Сообщение #22


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

Спасибо сказали: 0 раз(а)




Репутация:   0  


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

Что Вистовская весия? комилятор или библиотека?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 4.8.2008, 11:02
Сообщение #23


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Библиотека.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.8.2008, 11:40
Сообщение #24


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


edwardoid, попробуй отладочную версию собрать:
"Пуск" -> "Программы" -> "Qt 4.4.*****" -> "Qt 4.4.* (Build Debug Libraries)"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V   1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 4.6.2025, 23:48