Russian Qt Forum

Qt => Общие вопросы => Тема начата: xintrea от Декабрь 19, 2015, 02:41



Название: Не могу разобраться в наследовании. Интерфейс второго потомка QWidget
Отправлено: xintrea от Декабрь 19, 2015, 02:41
Есть у меня класс EditorToolBar, наследник QWidget. И есть класс EditorToolBarAssistant, наследник EditorToolBar. То есть, EditorToolBarAssistant - это второй потомок QWidget.

И не компилируется метод addWidget в следующем коде:

Код:
editorMainLayer=new QGridLayout(editorMainScreen);
editorMainLayer->addWidget(editorToolBarAssistant, 0,0, 1,2);

Где editorToolBarAssistant - это экземпляр класса EditorToolBarAssistant.

Ошибка такая:

Код:
../mytetra/src/views/record/MetaEditor.cpp: In member function 'void MetaEditor::metaAssembly()':
../mytetra/src/views/record/MetaEditor.cpp:143:80: error: no matching function for call to 'QGridLayout::addWidget(EditorToolBarAssistant*&, int, int, int, int)'
   editorMainLayer->addWidget(editorToolBarAssistant,                   0,0, 1,2);
                                                                                ^
../mytetra/src/views/record/MetaEditor.cpp:143:80: note: candidates are:
In file included from /media/wd_640_part_2/opt/Qt_5_4_2/5.4/gcc/include/QtWidgets/qlayout.h:166:0,
                 from /media/wd_640_part_2/opt/Qt_5_4_2/5.4/gcc/include/QtWidgets/qboxlayout.h:37,
                 from /media/wd_640_part_2/opt/Qt_5_4_2/5.4/gcc/include/QtWidgets/QBoxLayout:1,
                 from ../mytetra/src/views/record/MetaEditor.cpp:1:
/media/wd_640_part_2/opt/Qt_5_4_2/5.4/gcc/include/QtWidgets/qgridlayout.h:95:17: note: void QGridLayout::addWidget(QWidget*)
     inline void addWidget(QWidget *w) { QLayout::addWidget(w); }
                 ^
/media/wd_640_part_2/opt/Qt_5_4_2/5.4/gcc/include/QtWidgets/qgridlayout.h:95:17: note:   candidate expects 1 argument, 5 provided
/media/wd_640_part_2/opt/Qt_5_4_2/5.4/gcc/include/QtWidgets/qgridlayout.h:96:10: note: void QGridLayout::addWidget(QWidget*, int, int, Qt::Alignment)
     void addWidget(QWidget *, int row, int column, Qt::Alignment = 0);
          ^
/media/wd_640_part_2/opt/Qt_5_4_2/5.4/gcc/include/QtWidgets/qgridlayout.h:96:10: note:   candidate expects 4 arguments, 5 provided
/media/wd_640_part_2/opt/Qt_5_4_2/5.4/gcc/include/QtWidgets/qgridlayout.h:97:10: note: void QGridLayout::addWidget(QWidget*, int, int, int, int, Qt::Alignment)
     void addWidget(QWidget *, int row, int column, int rowSpan, int columnSpan, Qt::Alignment = 0);
          ^
/media/wd_640_part_2/opt/Qt_5_4_2/5.4/gcc/include/QtWidgets/qgridlayout.h:97:10: note:   no known conversion for argument 1 from 'EditorToolBarAssistant*' to 'QWidget*'

Вот я не пойму в чем проблема. То ли в наследовании (интеррфейс EditorToolBarAssistant не содержит интерфейса QWidget) то ли не может закомпилится класс EditorToolBarAssistant. Ибо далее в другом месте ошибка следующая:

Код:
../mytetra/src/views/record/MetaEditor.cpp: In member function 'void MetaEditor::clearAll()':
../mytetra/src/views/record/MetaEditor.cpp:232:24: error: invalid use of incomplete type 'class EditorToolBarAssistant'
  editorToolBarAssistant->switchAttachIconExists(false);
                        ^
In file included from ../mytetra/src/views/record/MetaEditor.h:8:0,
                 from ../mytetra/src/views/record/MetaEditor.cpp:8:
../mytetra/src/libraries/wyedit/Editor.h:47:7: error: forward declaration of 'class EditorToolBarAssistant'
 class EditorToolBarAssistant;
       ^
Makefile:11979: recipe for target 'build/MetaEditor.o' failed

По какой-то причине имеем incomplete type 'class EditorToolBarAssistant', а в самом классе EditorToolBarAssistant компилятор ошибок не оказывает.

В чем может быть проблема?

Исходники:

https://github.com/xintrea/mytetra_dev/commits/editorModification

Коммит: 0c1b073a21bc10635671666c44c96c3820c1dc7f


Название: Re: Не могу разобраться в наследовании. Интерфейс второго потомка QWidget
Отправлено: Fat-Zer от Декабрь 19, 2015, 04:04
editorMainLayer=new QGridLayout(editorMainScreen);
editorMainLayer->addWidget(editorToolBarAssistant, 0,0, 1,2);
ставлю на то, что сюда не включён хедер с определением EditorToolBarAssistant.
[added]
По какой-то причине имеем incomplete type 'class EditorToolBarAssistant', а в самом классе EditorToolBarAssistant компилятор ошибок не оказывает.
не заметил, значит точно в этом проблема...