मुझे आशा है कि शीर्षक वास्तव में वर्णन करता है कि मैं पूछना चाहता था ...सी ++ विधि कॉल और प्रकार गुंजाइश संकल्प अस्पष्टता
मैं कोड है कि जीसीसी के साथ संकलित करता है तथा जैसा कि मैंने अपेक्षित तरीके से काम का एक टुकड़ा लिखा था। हालांकि, यह आईएलसी के साथ संकलित होने पर llvm के साथ संकलित नहीं होता है और कोड अलग-अलग निष्पादित करता है!
#include <iostream>
using std::cout; using std::endl;
class A {
public:
virtual void foo() { cout << "A::foo()" << endl; }
};
class B : public A {
public:
typedef A base;
virtual void foo() { cout << "B::foo()" << endl; }
};
int main() {
typedef B base;
base* bp = new B();
bp->base::foo();
}
जीसीसी उत्पादन:
यहाँ समस्या का एक उदाहरण है एक :: foo()
आईसीसी उत्पादन: बी :: foo()
किसी समझा सकते हैं क्या करता है मानक के बारे में कहना ये मामला?
मैं कहूंगा कि यह जीसीसी और आईसीसी में एक बग है, क्योंकि 'बी :: बेस' 'बी' का _member_ नहीं है, जिसका अर्थ है कि इसे सदस्य के रूप में एक्सेस करना संभव नहीं है (' बीपी-> base')। –
मैं @ जोचिमपिलबोर्ग से सहमत हूं, इसके अलावा 'आधार' को इस दायरे में बी के रूप में व्याख्या किया जा सकता है। क्या आपने चेतावनी झंडे से संकलित किया है? (- जीसीसी के लिए सभी) – Geoffroy
क्या यह सिर्फ अपरिभाषित व्यवहार नहीं है, क्योंकि 'मुख्य' आवश्यक रूप का नहीं है? ऐसा लगता है कि सभी कंपाइलर्स सही हैं। –