Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с копиляцией QT4. 
V
    Опции темы
Mephisto
Дата 4.4.2008, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: 1
Всего: 34



Вот собственно небольшой код. Не пойму почему не хочет компилироваться. 
Код

#include <qapplication.h>
#include <qpushbutton.h>
#include <qmainwindow.h>

class QMainWindow;

class frmMain:public QMainWindow{
Q_OBJECT
public:
  frmMain(QWidget* parent = 0, Qt::WindowFlags flags = 0):QMainWindow(parent, flags){
    pb = new QPushButton(this);
  }
  QPushButton* pb;
};

int main(int argc, char** argv){
  QApplication app(argc, argv);
  frmMain m;
  QObject::connect(m.pb, SIGNAL(clicked()), &app, SLOT(quit()));
  m.show();
  return app.exec();
}


Qmake запускал если чего smile
PM   Вверх
archimed7592
Дата 4.4.2008, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93




M
archimed7592
Цитата из правил раздела(даже жирным выделено для особо внимательных)
Цитата
Указывайте полностью ошибки компилятора и компоновщика.

... "если чего" smile

Это сообщение отредактировал(а) archimed7592 - 4.4.2008, 15:29


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Mephisto
Дата 4.4.2008, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: 1
Всего: 34



Цитата

release\main.o(.text+0xa1):main.cpp: undefined reference to `vtable for frmMain'

release\main.o(.text+0xad):main.cpp: undefined reference to `vtable for frmMain'

release\main.o(.text+0x159):main.cpp: undefined reference to `vtable for frmMain
'
release\main.o(.text+0x160):main.cpp: undefined reference to `vtable for frmMain
'
release\main.o(.text+0x219):main.cpp: undefined reference to `vtable for frmMain
'
release\main.o(.text+0x223):main.cpp: more undefined references to `vtable for f
rmMain' follow
collect2: ld returned 1 exit status


Добавлено через 26 секунд
... "если чего"  smile 
PM   Вверх
archimed7592
Дата 4.4.2008, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93



1. Либо засунуть определение класса в .h
2. Либо написать в конце main.cpp что-то вроде #include "main.moc"(точно не помню).
3. Либо дописать в .pro файл строку HEADERS += main.cpp


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Urvin
Дата 4.4.2008, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 1.6.2006

Репутация: нет
Всего: нет



Присоединюсь к вопросу. Причем использую Code::Blocks под win32.
Как можно все это автоматизировать?
PM MAIL   Вверх
archimed7592
Дата 4.4.2008, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93



Цитата(Urvin @  4.4.2008,  16:32 Найти цитируемый пост)
Как можно все это автоматизировать? 

См. п. 1 моего ответа.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Urvin
Дата 4.4.2008, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 1.6.2006

Репутация: нет
Всего: нет



archimed7592,  прости, не секу. У меня есть ui_mainfrm.h, сформированный через uic
есть mainfrm.h:
Код

#ifndef MAINFRM_H_
#define MAINFRM_H_

#include "ui_mainfrm.h"

class frmMain : public QMainWindow, public Ui::frmMain {
    Q_OBJECT

    public:
        frmMain(QMainWindow* pwgt = 0) : QMainWindow(pwgt)
        {
            setupUi(this);
        }
};

#endif // MAINFRM_H_


и, собственно, main.cpp
Код

#include <QApplication>
#include "mainfrm.h"

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

    frmMain form;

    form.show();

    return app.exec();
}



куда жать?  smile 
PM MAIL   Вверх
Mephisto
Дата 4.4.2008, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: 1
Всего: 34



Urvin, в твоем случае QMake запустить только нужно smile
PM   Вверх
Urvin
Дата 4.4.2008, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 1.6.2006

Репутация: нет
Всего: нет



так ведь хочется из-под Code::Blocks все вершить, а не постоянно лазить в консольку
PM MAIL   Вверх
Mephisto
Дата 4.4.2008, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: 1
Всего: 34



Цитата

release\moc_main.cpp:11:2: #error "The header file 'main.cpp' doesn't include <Q
Object>."
release\moc_main.cpp:18: error: `uint' does not name a type
release\moc_main.cpp:35: error: `QMetaObject' does not name a type
release\moc_main.cpp:40: error: expected init-declarator before '*' token
release\moc_main.cpp:40: error: expected `,' or `;' before '*' token
release\moc_main.cpp:45: error: `frmMain' has not been declared
release\moc_main.cpp: In function `void* qt_metacast(const char*)':
release\moc_main.cpp:48: error: `strcmp' undeclared (first use this function)
release\moc_main.cpp:48: error: (Each undeclared identifier is reported only onc
e for each function it appears in.)
release\moc_main.cpp:49: error: `frmMain' has not been declared
release\moc_main.cpp:49: error: expected `>' before '*' token
release\moc_main.cpp:49: error: expected `(' before '*' token
release\moc_main.cpp:49: error: expected primary-expression before '>' token
release\moc_main.cpp:49: error: invalid use of `this' in non-member function
release\moc_main.cpp:49: error: expected `)' before ';' token
release\moc_main.cpp:50: error: `QMainWindow' has not been declared
release\moc_main.cpp: At global scope:
release\moc_main.cpp:53: error: `frmMain' has not been declared
release\moc_main.cpp:53: error: `QMetaObject' has not been declared
release\moc_main.cpp:53: error: `Call' was not declared in this scope
release\moc_main.cpp:53: error: expected primary-expression before "int"
release\moc_main.cpp:53: error: expected primary-expression before "void"
release\moc_main.cpp:54: error: initializer expression list treated as compound
expression
release\moc_main.cpp:54: error: expected `,' or `;' before '{' token
mingw32-make.exe[1]: *** [release\moc_main.o] Error 1
mingw32-make.exe[1]: Leaving directory `C:/tratata'
c:\MinGW\bin\mingw32-make.exe: *** [release] Error 2

Цитата(archimed7592 @  4.4.2008,  16:47 Найти цитируемый пост)
1. Либо засунуть определение класса в .h
2. Либо написать в конце main.cpp что-то вроде #include "main.moc"(точно не помню).
3. Либо дописать в .pro файл строку HEADERS += main.cpp 


archimed7592, Это мне написало после выполнения п.3
Файл moc_main.cpp появляется именно после п.3. До этого есть только main.o
PM   Вверх
JackYF
Дата 4.4.2008, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 7
Всего: 162



Цитата(Urvin @  4.4.2008,  15:57 Найти цитируемый пост)
Code::Blocks все вершить, а не постоянно лазить в консольку 

там есть замечательная опция "use external makefile"


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
archimed7592
Дата 4.4.2008, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93



Цитата(Mephisto @  4.4.2008,  16:58 Найти цитируемый пост)
archimed7592, Это мне написало после выполнения п.3

Значит п.3 отпадает,
в п.2 корректива: #include "moc_main.cpp",
а в п.1 уточнение:
    либо нужно сделать qmake -project, чтобы перегенерился .pro(учти, что всё что ты написал там руками затрётся),
    либо добавить соответствующий .h в HEADERS ручками.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Mephisto
Дата 6.4.2008, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: 1
Всего: 34



Код

#include <qapplication.h>
#include <qmainwindow.h>
#include <qpushbutton.h>

class frmMain:public QMainWindow{
    Q_OBJECT
public:
    frmMain():QMainWindow(0, 0){
        pb = new QPushButton(this);
    }
    QPushButton* pb;
};

int main( int argc, char ** argv ) {
    QApplication a( argc, argv );
    frmMain * mw = new frmMain();
        QObject::connect(mw->pb, SIGNAL(clicked()), &a, SLOT(quit()));
    mw->show();
    return a.exec();
}

#include <main.moc>

Вот так скомпилилось. По крайней мере под линухом smile
PM   Вверх
vitovt
Дата 21.3.2010, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 3.10.2006

Репутация: нет
Всего: нет



Маленькое дополнение к топику
Недавно встретился с такой же проблемой.
Стал разрабатывать небольшую аппликуху, состоящую из нескольких модулей. Естессно, решил вынести общие заголовочные файлы в отдельную директорию. Структура проекта имела вид:

Код

<AppRoot>
    <include>
          mainwindow.h
    <mainapp>
          main.cpp
          mainwindow.cpp
    <somelib>


Файл проекта mainapp.pro выглядел:

Код

TARGET = mainapp
TEMPLATE = app
SOURCES += main.cpp \
    mainwindow.cpp 
INCLUDEPATH += ../include
HEADERS += mainwindow.h 


При попытке построить проект получал undefined reference to `vtable for MainWindow'
Как выяснилось, дело оказалось в файле проекта. mainwindow.h следовало включать так:

Код

HEADERS += ../include/mainwindow.h 


т.е. с полным путем
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0574 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.