LINUX.ORG.RU

наследование, С++, QT


0

0

есть несколько связанных наследованием классов:

class classC : public QObject
{
	Q_OBJECT

        classC();
        ...
};

class classA : public QObject
{
	Q_OBJECT

        classA();
        ...
};

class classV : public classC, public classA
{
	Q_OBJECT

        classV(...);
        ...
};


И ошибка:

classV.h:31: error: `QObject' is an ambiguous base of 'classV'
и ещё куча других.

Как поправить ? 
Сенкс.
anonymous

аналогичный пример, но уже с QT классом, также выдаёт ошибку:

class classB : public QObject
{
    Q_OBJECT

    public:
    classB() : QObject()
    {}

    virtual ~classB()
    {}
};

class classV : public classB, public QIconView
{
    Q_OBJECT

    public:
    classV() : classB(), QIconView(0)
    {}

    ~classV()
    {}
};

--------------------------------------------

g++ -c -pipe -Wall -W -O2 -fomit-frame-pointer -pipe -march=i586
 -mcpu=pentiumpro  -DQT_NO_DEBUG -DQT_SHARED -DQT_THREAD_SUPPORT -I/usr/lib/qt3/mkspecs/default -I. -I. -I/usr/lib/qt3//include -o main.o main.cpp
main.cpp: In member function `QObject* classV::qObject()':
main.cpp:32: error: `QObject' is an ambiguous base of `classV'
make: *** [main.o] Ошибка 1

anonymous
()
Ответ на: комментарий от anonymous

Мне не совсем понятно почему g++ ругается, но это не столь важно. Объясните, пожалуйста, зачем Вам понадобился класс, у которого QObject является 2 раза предком (это кажется diamond называют), это скорее всего ошибка проектирования. Используйте виртуальные базовые классы, если уж сильно хочется

phoenix ★★★★
()
Ответ на: комментарий от phoenix

>Мне не совсем понятно почему g++ ругается, но это не столь важно.

вот именно на наследование дважды от QObject c++ и ругается.

и пишет, кстати, об этом.

anonymous
()
Ответ на: комментарий от anonymous

С каких пор в C++ нельзя создать класс, наследующий от заданного класса _непрямо_ хоть 10 раз? Если я правильно помню, то запрещено было только к одновременно прямое и непрямое наследование.

phoenix ★★★★
()


C QObject этот номер не пройдет.
Лучше потратьте время на дизайн собственных классов, чем на решение неразрешимых проблем.





ANDI ★★
()
Ответ на: комментарий от phoenix

Спасибо. Всё оказалось банально просто и некрасиво :)

moc просто не понимает классов, наследованных дважды от QObject при любой глубине дерева наследования (как во втором примере). Пришлось отказаться от множественного наследования :)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.