निम्नलिखित स्निपेट त्रुटि संकलन के दौरान "foo को ambigious कॉल" एक पैदा करता है, और मैं पूरी तरह से कॉल योग्यता foo के बिना अगर वहाँ किसी भी तरह से इस समस्या को हल है जानना चाहते हैं:एक ही नाम के साथ एकाधिक विरासत वाले फ़ंक्शन क्यों करते हैं लेकिन अलग-अलग हस्ताक्षर ओवरलोड किए गए फ़ंक्शंस के रूप में नहीं मानते हैं?
#include <iostream>
struct Base1{
void foo(int){
}
};
struct Base2{
void foo(float){
}
};
struct Derived : public Base1, public Base2{
};
int main(){
Derived d;
d.foo(5);
std::cin.get();
return 0;
}
तो, सवाल शीर्षक के रूप में है। विचार? मेरा मतलब है, निम्नलिखित कार्य निर्दोष रूप से काम करते हैं:
#include <iostream>
struct Base{
void foo(int){
}
};
struct Derived : public Base{
void foo(float){
}
};
int main(){
Derived d;
d.foo(5);
std::cin.get();
return 0;
}
लगातार दो फ़ूज़ (दूसरे मामले में) के अंदर लॉगिंग स्टेटमेंट्स को जोड़ने के लिए जो फ़ंक्शन कहा जाता है, आप आश्चर्यचकित होंगे ... सी ++ आर्केन नियम से भरा है;) –
@Maththieu: * gasp *! डॉन छुपा नियम। :( – Xeo