class messageA {
};
class messageB {
};
template<class T>
class queue {
public:
virtual ~queue() {}
void submit(T& x) {}
};
class A : public queue<messageA>, public queue<messageB>
{
};
int main()
{
A aa;
aa.submit(messageA());
aa.submit(messageB());
}
मेरा पहला विचार यह है कि उपर्युक्त कोड ठीक होना चाहिए, क्योंकि कक्षा ए में 2 अधिभारित सबमिट फ़ंक्शन होंगे, जो संदेश ए और संदेश बी ऑब्जेक्ट स्वीकार करेंगे।एकाधिक विरासत टेम्पलेट कक्षा
मैं जान सकती हूँ क्यों है वहाँ एक अस्पष्ट:
हालांकि, संकलक मुझे निम्न त्रुटि देता है? क्या यह बिल्कुल स्पष्ट नहीं है कि, पहली सबमिट कॉल के लिए, मैं संदेश ए संस्करण को कॉल करना चाहता हूं? दूसरे जमा कॉल के लिए, मैं संदेश बी संस्करण को कॉल करना चाहता हूं?
------ Build started: Project: main, Configuration: Release Win32 ------
Compiling...
main.cpp
.\main.cpp(21) : error C2385: ambiguous access of 'submit'
could be the 'submit' in base 'queue<messageA>'
or could be the 'submit' in base 'queue<messageB>'
.\main.cpp(21) : error C3861: 'submit': identifier not found
.\main.cpp(22) : error C2385: ambiguous access of 'submit'
could be the 'submit' in base 'queue<messageA>'
or could be the 'submit' in base 'queue<messageB>'
.\main.cpp(22) : error C2664: 'queue<T>::submit' : cannot convert parameter 1 from 'messageB' to 'messageA &'
with
[
T=messageA
]
.\main.cpp(22) : error C3861: 'submit': identifier not found
ध्यान दें कि 'messageA' से 'messageA' तक अंतर्निहित रूपांतरण मानक C++ नहीं है; एक गैर-कॉन्स्ट संदर्भ केवल एक lvalue (http://msdn.microsoft.com/en-us/library/186yxbac(VS.80).aspx) से बाध्य हो सकता है। 'सबमिट()' फ़ंक्शन को 'टी &' के बजाय 'कॉन्स्ट टी &' स्वीकार करना चाहिए। –