structs की निम्न पदानुक्रम पर विचार करें:अतिभारित छुपा आभासी समारोह
struct I1 {
virtual void doit() = 0;
};
struct I2 {
virtual void doit(int) = 0;
};
struct I12 : I1, I2 {
using I1::doit;
using I2::doit;
};
struct Derived : I12 {
void doit(int) override {}
};
इस संकलन (clang
, या g++
-Woverloaded-virtual
साथ उपयोग करते हुए) मुझे एक चेतावनी देता है: अगर मैं I12
बदलने
'Derived::doit' hides overloaded virtual function [-Woverloaded-virtual]
हालांकि, निम्नलिखित में, यह clang
के तहत ठीक से संकलित करता है, जबकि g++ -Woverloaded-virtual
अभी भी एक चेतावनी देता है:
struct I12 : I1, I2 {
using I1::doit;
void doit(int) override = 0;
};
using I2::doit
और void doit(int) override = 0
के बीच अंतर कहां है? नैतिक रूप से, मैंने सोचा होगा कि पूर्व संकलक को सूचित करने के लिए पर्याप्त है कि मुझे पता है कि doit
के दो संस्करण हैं।
आप क्या संकलक का उपयोग कर रहे हैं? मुझे जीसीसी या एमएसवीएस में चेतावनी नहीं मिल सकती है लेकिन मैं झुकाव में करता हूं। – NathanOliver
हां आप इसे छुपा रहे हैं। तो आपका सवाल क्या है? वर्बोज चेतावनी को कैसे खत्म करें? – songyuanyao
@NathanOliver मैंने क्लैंग का उपयोग किया, लेकिन चेतावनियों के साथ जी ++ का उपयोग विभिन्न व्यवहार दिखाता है। – phimuemue