Привет всем,
У меня опыт работы с 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_ */
Мой производный класс.
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 for IViewer 'collect2: ld вернула 1 статус выхода
Должен ли я иметь реализацию IView в файле CPP (потому что все, что мне нужно, это интерфейс, а не реализация)?