मैं तीन वर्गों इस तरह संरचित है
In function ‘int main()’:
error: request for member ‘GetValue’ is ambiguous
error: candidates are: virtual float Keyword::GetValue()
error: virtual float MeasurementKeyword::GetValue()
error: virtual float CharacterKeyword::GetValue()
फिक्सिंग सी ++ एकाधिक विरासत अस्पष्ट कॉल
#include <iostream>
using namespace std;
class Keyword
{
public:
virtual float GetValue() = 0;
};
class CharacterKeyword : public Keyword
{
public:
virtual float GetValue(){return _value;}
private:
float _value;
};
class MeasurementKeyword : public Keyword
{
public:
virtual float GetValue(){return _value;}
private:
float _value;
};
class AddressType : public CharacterKeyword, public MeasurementKeyword
{
private:
float address;
float addresExt;
};
int main()
{
AddressType *a = new AddressType();
a->GetValue();
return 0;
}
मैं निम्नलिखित हो रही है 0
मैंने कई विरासत में कुछ पढ़ा है और मुझे पता है कि इसमें बहुत सारे नुकसान हैं - यह उनमें से एक है। मुझे अपनी कक्षा संरचना इस तरह होने की ज़रूरत है, इसलिए मैं सोच रहा था कि क्या कोई तरीका था कि मैं टेम्पलेट का उपयोग करके इसे ठीक कर सकता हूं?
अद्यतन
अपनी टिप्पणी पढ़ने के बाद, मेरा मूल विचार है कि शायद मैं सिर्फ एक AddressType
कि एक CharacterKeyword
है और एक AddressType
कि AddressType
templating द्वारा एक MeasurementKeyword
है के बीच चित्रित कर सकते थे। और इसे अद्यतन कोड में उपयोग कर रहा है। या मैं केवल उस सदस्य का नामस्थान निर्दिष्ट कर सकता हूं जिसे मैं चाहूंगा। चूंकि टेम्पलेटेड तरीके का अभी तक एक उत्तर के रूप में उल्लेख नहीं किया गया है, क्या यह एक खराब फिक्स है? क्या मुझे बस उस सदस्य का नामस्थान निर्दिष्ट करना चाहिए जिसे मैं चाहता हूं?
template <class T>
class AddressType : public T
{
private:
float address;
float addresExt;
};
int main()
{
AddressType<MeasurementKeyword> *a = new AddressType<MeasurementKeyword>();
a->GetValue();
return 0;
}
कैसे आप इस .. क्या तुम यहाँ हो करना चाहते हैं ठीक करने के लिए चाहते हैं पर निर्भर करता है? –
@ कार्तिकट इसलिए मैंने उन्हें दोनों तरीकों से दिया;) – aaronman
@ हारोनमैन यूप, आपके समाधान को दोष नहीं दे रहा है, लेकिन यह सुनिश्चित नहीं है कि वह टेम्पलेट्स के साथ क्या करना चाहता है .. –