में जावा-जैसे इंटरफेस ओवरलैप करना मैंने कई स्थानों पर पढ़ा है कि जावा के इंटरफ़ेस को सभी शुद्ध आभासी तरीकों के साथ सी ++ के अमूर्त वर्ग का उपयोग करके 100% नकल किया जा सकता है।सी ++
मैं जावा कोड के इस टुकड़े कन्वर्ट करने के लिए कोशिश कर रहा हूँ:
class A {
public:
virtual void a() const = 0;
protected:
virtual ~A() {
}
};
class B : public A {
public:
virtual void b() const = 0;
protected:
virtual ~B() {
}
};
class C : public /*implements*/ A {
public:
virtual void a() const override {
}
};
class D : public /*extends*/ C, public /*implements*/ B {
public:
virtual void b() const override {
}
};
D d;
d.a();
d.b();
लेकिन कोई बात नहीं कितना मुश्किल मैं कोशिश, मैं हमेशा ऊपर के साथ समाप्त: C++ कुछ इस तरह में
interface A {
void a();
}
interface B extends A {
void b();
}
class C implements A {
public void a() {
}
}
class D extends C implements B {
public void b() {
}
}
D d = new D();
d.a();
d.b();
सी ++ अस्पष्टता और/या अनुपस्थित शरीर परिभाषाओं के बारे में शिकायत करते हैं।
विचार यह है कि मैं "सी" से प्राप्त करना चाहता हूं जिसमें सभी वर्गों के लिए कुछ साझा कोड शामिल है (यहां: "डी" लेकिन उनमें से अधिक है) और फिर भी वादा बनाए रखें कि "डी" 100% विनिमयशील है किसी भी वर्ग को "बी" लागू करना ("ए" के हिस्सों सहित)।
त्रुटियों मैं ऊपर सी ++ कोड के साथ हो रही है है:
../untitled1/main.cpp: In function ‘int main(int, char**)’:
../untitled1/main.cpp:39:7: error: cannot declare variable ‘d’ to be of abstract type ‘D’
D d;
^
../untitled1/main.cpp:28:7: note: because the following virtual functions are pure within ‘D’:
class D : public /*extends*/ C, public /*implements*/ B {
^
../untitled1/main.cpp:7:18: note: virtual void A::a() const
virtual void a() const = 0;
^
../untitled1/main.cpp:40:7: error: request for member ‘a’ is ambiguous
d.a();
^
../untitled1/main.cpp:7:18: note: candidates are: virtual void A::a() const
virtual void a() const = 0;
^
../untitled1/main.cpp:23:18: note: virtual void C::a() const
virtual void a() const override {
^
क्या आप हमें एक [मिनिमल, *** पूरा *** और सत्यापन योग्य उदाहरण] (http दिखा सकते हैं: // stackoverflow.com/help/mcve), और आपको प्राप्त * वास्तविक * त्रुटियों को शामिल करें (कॉपी-पेस्ट, पूर्ण, पूर्ण और unedited में)? –
@ सोप्रप्रोग्रामड्यूड: कोड स्निपेट * पूर्ण हैं, मुझे लगता है कि मुझे मुख्य() फ़ंक्शन की आपूर्ति करने की आवश्यकता नहीं है। मैंने कंपाइलर आउटपुट जोड़ा है। –
आपको * हीरा समस्या * का सामना करना पड़ सकता है। –