मुझे अपने कोड में एक लिंकर त्रुटि मिल रही है। मैंने इसे नीचे की जरूरी जरूरी चीजों पर ठोकर दिया है।"vtable" लिंकर त्रुटि ("= डिफ़ॉल्ट" के साथ एक आभासी विनाशक शामिल) - Clang 3.1 में संभावित बग?
इस कोड लिंकर त्रुटि "फू के लिए vtable", से संदर्भित देता है: फू :: फू()
class Foo {
public:
Foo();
virtual ~Foo() = default;
};
Foo::Foo() { }
लेकिन इस कोड कोई त्रुटि नहीं देता:
class Foo {
public:
Foo();
virtual ~Foo() { }
};
Foo::Foo() { }
क्यों? मैंने सोचा कि = default
मूल रूप से उन खाली वर्ग ब्रैकेट के समान ही काम करना था।
अद्यतन: मैं एक्सकोड 4.5.2 का एक हिस्सा "ऐप्पल एलएलवीएम कंपाइलर 4.1" का उपयोग कर रहा हूं। क्या यह इस कंपाइलर में एक बग हो सकता है? यह संभवतः नवीनतम जीसीसी पर काम कर सकता है (हालांकि ऐप्पल अब शिपिंग नहीं कर रहा है)। कंपाइलर्स पर चर्चा के लिए नीचे टिप्पणियां देखें।
अपडेट 2: जैसा कि नीचे चर्चा की गई है, virtual inline ~Foo() = default;
पर लाइन को बदलना इस त्रुटि से छुटकारा पाता है। क्या यह पर कोई बग नहीं है? ऐसा लगता है कि संकलक inline
को स्पष्ट रूप से लिखने के बिना इस मामले में एक इनलाइन फ़ंक्शन को नहीं पहचानता है।
'आभासी ~ Foo() noexcept = default;' आज़माएं। मुझे लगता है कि मुझे एक बार एक ही समस्या थी और 'डिफ़ॉल्ट' पर छोड़ दिया गया। इसके अलावा, मुझे लगता है कि इसके बारे में एक डीआर भी है। –
@KerrekSB लिंकर त्रुटि अभी भी 'noexcept' के साथ है। –
यह मेरे लिए जीसीसी 4.7.2 के साथ काम करता है। – Kocka