ग्रीटिंग्स,सी ++ इंटरफेस के साथ एकाधिक वंशानुक्रम?
मैं जावा पृष्ठभूमि से आया हूं और मुझे एकाधिक विरासत में कठिनाई हो रही है।
मेरे पास आईवीव नामक एक इंटरफ़ेस है जिसमें init() विधि है। मैं प्लान व्यूअर नामक एक नई कक्षा प्राप्त करना चाहता हूं जो ऊपर इंटरफ़ेस को कार्यान्वित करता है और एक और वर्ग का विस्तार करता है। (QWidget)।
मेरे कार्यान्वयन है के रूप में:
IViwer.h (केवल हैडर फ़ाइल, कोई सीपीपी फ़ाइल):
#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(){
}
मेरे प्रश्न हैं:
- यह आवश्यक PlaneViewer इंटरफ़ेस में विधि init() घोषित करने के लिए है भी है, क्योंकि यह पहले से ही परिभाषित किया गया है मैं n IVIEW?
2.I कोड ऊपर complie नहीं कर सकता, त्रुटि दे:
PlaneViewer] 0x28): के लिए IViewer ' collect2 `typeinfo को अपरिभाषित संदर्भ: ld 1 से बाहर निकलें स्थिति लौटा
मैं है (क्योंकि सभी मैं चाहता हूँ एक इंटरफेस है, न कार्यान्वयन के रूप में) सीपीपी फ़ाइल में IVIEW के लिए कार्यान्वयन के लिए?
क्या मैं आपके डिजाइन के बारे में पूछ सकता हूं? एक ही विरासत पदानुक्रम में आपको QWidget और IViewer को एक साथ बांधने की आवश्यकता क्यों है? आप एकाधिक विरासत के साथ हल करने की क्या समस्या है? मैं पूछता हूं क्योंकि एकाधिक विरासत कुछ दुर्लभ परिस्थितियों में उपयोगी होती है लेकिन अक्सर समस्याएं अलग-अलग तरीके से हल होती हैं। –
मेरे आवेदन में कई प्रकार के दर्शक हैं जो समान डेटा साझा करते हैं। (3 डी वोक्सेल डेटा) .ईजी: 2 डी दर्शक (एक्सवाई प्लेन, वाईजेड प्लेन, जेडएक्स प्लेन) और एक 3 डी दर्शक। और भविष्य में कुछ और दर्शक होने जा रहे हैं। QWiget डेटा का चित्रण और प्रतिपादन का उपयोग करना है। IView सभी प्रकार के दर्शकों के लिए कमांड विधियों और डेटा घोषित करने के लिए एक सार वर्ग/इंटरफ़ेस है। –