Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Q_OBJECT класс с virtual методом, ошибка компиляции 
:(
    Опции темы
wowka19
Дата 4.10.2012, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В общем теория: есть класс-интерфейс с virtual void f() = 0, который к тому же имеет еще и НЕвиртуальные сигнал(ы). Само собой есть потомки 
того интерфейса. 

На практике: не знаю как это сделать, чтоб компилилось. MOC усложняет понимание сообщений gcc. Не понятно нужно ли наследовать интерфейс от QObject, нужен ли макрос Q_OBJECT, и если да то писать ли Q_OBJECT в потомках... Я перебирал разные комбинации, но толку ноль.

прошу помощи.

ориентировочный код (для упрощения понимания моей цели):

Код

class Interface
{
public:
        virtual void Method() = 0;

signals:
        void Msg(quint32 param);
};


class MyClass : public Interface
{
        void Method() {qDebug() << "ok!\n";}
};

// а потом типа:
int main()
{
        Interface * pInterface = new MyClass;

        pInterface->Method();
        pInterface ->Msg(0);

        // как то так...
        return 0;
}





PM MAIL   Вверх
borisbn
Дата 4.10.2012, 15:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Если в классе есть сигналы или слоты, то он д.б. наследован от QObject и внутри у него д.б. макрос Q_OBJECT



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
wowka19
Дата 4.10.2012, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ну вот:

Код

// interface.h

#ifndef INTERFACE_H
#define INTERFACE_H

#include <QtCore>

class Interface: public QObject
{
    Q_OBJECT

signals:
    void signl();

public:
    virtual void method() = 0;
};

#endif // INTERFACE_H



Код

// myclass.h

#ifndef IMPLEMENT_H
#define IMPLEMENT_H

#include "interface.h"

class MyClass: public Interface
{
public:
        void method() {qDebug() << "ok!\n";}
};

#endif // IMPLEMENT_H


Код

// main.cpp

#include "myclass.h"

int main()
{
        Interface * pInterface = new MyClass;
        pInterface->method();
        return 0;
}


НЕ работает ":: error: collect2: ld returned 1 exit status"
PM MAIL   Вверх
borisbn
Дата 4.10.2012, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



1) это единственная строка в выводе линковщика?
2) если убрать сигнал или убрать вирт. метод, то собирается?
3) пересоздай проект

Добавлено через 1 минуту и 24 секунды
Я не вижу ошибок в приведенном коде (не считая лика памяти и отсутствия вирт.деструктора  в интерфейсе


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
wowka19
Дата 4.10.2012, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



О! теперь работает (закрыл/открыл проект), хотя я же делал Очистить все -> Пересобрать все.

Цитата(borisbn @  4.10.2012,  18:56 Найти цитируемый пост)
Я не вижу ошибок в приведенном коде (не считая лика памяти и отсутствия вирт.деструктора  в интерфейсе 

ну про деструктор мне ясно ( не суть проблемы), а утечку ты где увидел?
PM MAIL   Вверх
borisbn
Дата 4.10.2012, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



> , а утечку ты где увидел? 
Кол-во new д.б. равно кол-ву delete  smile 


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
wowka19
Дата 5.10.2012, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(borisbn @  4.10.2012,  21:55 Найти цитируемый пост)
Кол-во new д.б. равно кол-ву delete    


Аааа, ну это да...  просто писать delete в конце main() не вижу смысла...
PM MAIL   Вверх
borisbn
Дата 6.10.2012, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(wowka19 @  5.10.2012,  21:31 Найти цитируемый пост)
писать delete в конце main() не вижу смысла

а если в деструкторе MyClass что-то отсылается по сети, записывается в БД и т.п. ?


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

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

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


 




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


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

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