Поиск:

Ответ в темуСоздание новой темы Создание опроса
> undefinded reference to vtable, undefinded reference to vtable Code::B 
V
    Опции темы
Devourer
Дата 6.8.2009, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Доброго времени...

Пример списан из книги Qt 4 программирование GUI на С++
Язык С++, среда разработки "Code::Blocks" в WinXP
Код main.cpp:
Код

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


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

    FindDialog *dialog= new FindDialog;
    dialog->show();


    return app.exec();
}


Код findialog.h:
Код

#ifndef FINDIALOG_H_INCLUDED
#define FINDIALOG_H_INCLUDED

#include <QDialog.h>

class QCheckBox;
class QLabel;
class QLineEdit;
class QPushButton;

class FindDialog : public QDialog
{
    Q_OBJECT
public:
        FindDialog(QWidget *parent=0);

signals:
        void findNext(const QString &str, Qt::CaseSensitivity cs);
        void findPrev(const QString &str, Qt::CaseSensitivity cs);
private slots:
        void findClicked();
        void enableFindButton(const QString &text);

private:
        QLabel *label;
        QLineEdit *lineEdit;
        QCheckBox *caseCheckBox;
        QCheckBox *backwardCheckBox;
        QPushButton *findButton;
        QPushButton *closeButton;
};

#endif


Код findialog.cpp:
Код

#include <QtGui>
#include "findialog.h"

FindDialog::FindDialog(QWidget *parent):QDialog(parent)
{
    label = new QLabel(tr("Find &what:"));
    lineEdit = new QLineEdit;
    label->setBuddy(lineEdit);
    caseCheckBox = new QCheckBox(tr("Match &case"));
    backwardCheckBox = new QCheckBox(tr("Search backward"));
    findButton = new QPushButton(tr("&Find"));
    findButton->setDefault(true);
    findButton->setEnabled(false);

    closeButton = new QPushButton(tr("Close"));

    connect(lineEdit,SIGNAL(textChanged(const QString &)),this,SLOT(enableFindButton(const QString &)));

    connect(findButton, SIGNAL(cliked()), this, SLOT(findCliked()));

    connect(closeButton, SIGNAL(cliked()), this , SLOT(close()));

    QHBoxLayout *topLeftLayout = new QHBoxLayout;
    topLeftLayout->addWidget(label);
    topLeftLayout->addWidget(lineEdit);

    QVBoxLayout *leftLayout = new QVBoxLayout;
    leftLayout->addLayout(topLeftLayout);
    leftLayout->addWidget(caseCheckBox);
    leftLayout->addWidget(backwardCheckBox);

    QVBoxLayout *rightLayout = new QVBoxLayout;
    rightLayout->addWidget(findButton);
    rightLayout->addWidget(closeButton);
    rightLayout->addStretch();

    QHBoxLayout *mainLayout = new QHBoxLayout;
    mainLayout->addLayout(leftLayout);
    mainLayout->addLayout(rightLayout);
    setLayout(mainLayout);

    setWindowTitle(tr("Find"));
    setFixedHeight(sizeHint().height());

}

void FindDialog::findClicked()
{
    QString text = lineEdit->text();
    Qt::CaseSensitivity cs=caseCheckBox->isChecked() ? Qt::CaseSensitive : Qt::CaseInsensitive;

    if (backwardCheckBox ->isChecked())
    {
        //emit findPrevious(text, cs);
    }
    else
    {
        //emit findNext(text,cs);
    }

}



Читал маны не помогло, пожалуйста помогите smile 
 smile Вот как мне это надо сделать?

Заранее большое спасибо...
PM MAIL ICQ   Вверх
andrew_121
Дата 7.8.2009, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Вывод компилятора показал бы что ли. Не телепаты тут.

Добавлено через 2 минуты и 29 секунд
А нет. Иногда телепаты.
Вот: http://forum.vingrad.ru/forum/topic-228867...ry/0.html#entry

Добавлено через 3 минуты и 36 секунд
Кароче moc-у нужно скормить findialog.h

Добавлено через 5 минут

п.с.
Цитата

О той что научила мен летать... <<< буковки не хватает




--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Devourer
Дата 7.8.2009, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо за полный ответ...

Эту тему я уже видел. Как "скормить" мок хидеру?
PM MAIL ICQ   Вверх
bsa
Дата 7.8.2009, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Devourer, вообще-то, все необходимые действия делает qmake. Если тебя работа через qmake не устраивает, то тогда придется делать вручную:
1. компилируешь *.cpp в объектные файлы
2. делаешь из хидера _moc.cpp файл (командой moc)
3. компилируешь полученный файл в объектный
4. линкуешь все объектные файлы

Я пользуюсь qmake и не парюсь...
PM   Вверх
Devourer
Дата 7.8.2009, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



bsa, Еще раз извините меня... но как написано выше... я юзаю Code::Blocks стоящий на винде... мне что мучать виндовскую консоль?
qmake у меня не работает... видимо потому что не стоит...

Это сообщение отредактировал(а) Devourer - 7.8.2009, 15:17
PM MAIL ICQ   Вверх
kuzulis
Дата 7.8.2009, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



2 Devourer , Code::Blocks необходимо настроить с работой qmake! У меня тож были касяки подобного плана... я плюнул на них и выкинул коде блокс и использую консоль smile

Попробуй из консоли собрать свое приложение для начала 

make clean
qmake <твой файл проекта>.pro
make


PM MAIL   Вверх
Devourer
Дата 7.8.2009, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я не в линухе...когда в винде пишу qmake меня шлют...

Есть Code::Blocks и QtCreator как их настроить?
PM MAIL ICQ   Вверх
bsa
Дата 7.8.2009, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Есть Qt Creator в комплекте с mingw и qt (qt sdk, вроде называется). Ставь его, там должно быть все уже настроено.
Если переустанавливать не хочешь, то можно через настройки в разделе Qt добавить версию и указать, где она находится. Так же, надо в переменную среды PATH прописать расположение компилятора mingw (панель управления - система - переменные среды - добавить): PATH=C:\mingw\bin
PM   Вверх
andrew_121
Дата 7.8.2009, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



нужно срочно вики по сборке/компиляции/установке/настройке написать. а то уже достали...


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Devourer
Дата 15.8.2009, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Моя ошибка.

В проекте в Qt Creator надо выбрать qmake. 
PM MAIL ICQ   Вверх
null56
Дата 16.8.2009, 02:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Devourer, в этой же книге, что вы используете, со страницы 22
Цитата

Для корректной работы утилиты moc необходимо, чтобы описание класса размещалось в заголовочном файле, отдельно от файла с реализацией. Код, сгенерированный утилитой moc подключает этот заголовочный файл.

Классы, в определении которых встречается макрос Q_OBJECT, должны обрабатываться компилятором метаобъектов в обязательном порядке. На самом деле, это не такая большая проблема, поскольку qmake автоматически добавит все необходимые правила в Makefile. Но если вы забудете перегенерировать Makefile, то линковщик будет "жаловаться" на отсутствие некоторых функций. Эти сообщения об ошибках могут порой вводить в заблуждение. Например, GCC выдает примерно такое предупреждение:

   finddialog.o(.text+0x28): undefined reference to  
   FindDialog::QPaintDevice virtual table    
      

Visual C++ такое:

   finddialog.obj : error LNK2001: unresolved external symbol 
   "public:~virtual bool __thiscall FindDialog::qt_property(int, 
   int,class QVariant *)"      
      
Если это произошло, то перезапустите qmake еще раз, чтобы обновить Makefile, а затем пересоберите приложение.


Добавлено через 5 минут и 29 секунд
Цитата

Я не в линухе...когда в винде пишу qmake меня шлют...

переменные окружения править надо... на хабре где - то была статья по этому поводу

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

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

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


 




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


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

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