Приветствую всех,
Я пришел из Java-фона и у меня возникли трудности с множественным наследованием.
У меня есть интерфейс с именем IView, в котором есть метод init (). Я хочу получитьновый класс под названием PlaneViewer, реализующий интерфейс выше и расширяющий другой класс.(QWidget).
Моя реализация выглядит так:
IViwer.h (только заголовочный файл, без файла CPP):
#ifndef IVIEWER_H_
#define IVIEWER_H_
class IViewer
{
public:
//IViewer();
///virtual
//~IViewer();
virtual void init()=0;
};
#endif /* IVIEWER_H_ */
Myпроизводный класс.
PlaneViewer.h
#ifndef PLANEVIEWER_H
#define PLANEVIEWER_H
#include <QtGui/QWidget>
#include "ui_planeviewer.h"
#include "IViewer.h"
class PlaneViewer : public QWidget , public IViewer
{
Q_OBJECT
public:
PlaneViewer(QWidget *parent = 0);
~PlaneViewer();
void init(); //do I have to define here also ?
private:
Ui::PlaneViewerClass ui;
};
#endif // PLANEVIEWER_H
PlaneViewer.cpp
#include "planeviewer.h"
PlaneViewer::PlaneViewer(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
}
PlaneViewer::~PlaneViewer()
{
}
void PlaneViewer::init(){
}
Мои вопросы:
- Необходимо ли также объявить метод init () в интерфейсе PlaneViewer, поскольку он уже определен в IView?
2.Я не могу выполнить приведенный выше код, выдает ошибку:
PlaneViewer] + 0x28): неопределенная ссылка на `typeinfo для IViewer 'collect2: ld вернул 1 состояние выхода
Нужно ли иметь реализацию для IView в файле CPP (потому что все, что я хочу, этоинтерфейс, а не как реализация)?