निम्न कोड जीसीसी के सभी संस्करणों पर बाद में संकलन त्रुटि उत्पन्न करता है जो मैंने कोशिश की है, सी ++ 98, सी ++ 11 और सी ++ 14 मोड में:त्रुटि: एनाक्रोनिस्टिक पुरानी शैली बेस क्लास प्रारंभकर्ता
struct T
{
T(void* x) : (x) {}
};
// main.cpp: In constructor 'T::T(void*)':
// main.cpp:3:18: error: anachronistic old-style base class initializer [-fpermissive]
// T(void* x) : (x) {}
// ^
// main.cpp:3:16: error: unnamed initializer for 'T', which has no base classes
// T(void* x) : (x) {}
निश्चित रूप से, यह स्पष्ट रूप से टूटा हुआ कोड है क्योंकि मैं वास्तव में कुछ भी शुरू नहीं कर रहा हूं।
लेकिन यह बेस-क्लास प्रारंभिक क्यों है और यह गलत होने की बजाय "अनाचारवादी" क्यों है? क्या यह एक बार मान्य था? कब? और इसका क्या मतलब था?
only related references मैं वेब पर यह करने के लिए मिल गया है है लोगों से किया गया त्रुटि भर में आ रहा है जब एक सदस्य का नाम गलती से बाहर macro'd किया गया था, को प्रभावी ढंग से उपर दिए गए कोड में जिसके परिणामस्वरूप:
#define bar
//^some library could have done this
struct T
{
T(int x)
: bar(x) // effectively just `: (x)`
{}
int bar; // will cause its own error
};
उन लोगों को कभी पता नहीं चला कि त्रुटि क्या है, हालांकि बाद में कम से कम पता चला कि उनका कार्यक्रम क्यों टूट गया था।
मैं _guess_ होगा कि यह वाक्यविन्यास क्लास के साथ सी में बेस क्लास प्रारंभिक वाक्यविन्यास था, सबसे पहले [गैर मानक] सी ++ ने कई विरासत पेश किए थे। –
यह भी मेरे लिए सबसे व्यावहारिक परिकल्पना की तरह लगता है। दुर्भाग्यवश, मैं, आम, सामान्य चैनलों के माध्यम से "द सी ++ प्रोग्रामिंग भाषा" का पहला या दूसरा संस्करण नहीं ढूंढ पाया। मुझे यकीन है कि एसओ पर किसी के पास एक है, हालांकि। – Brian
शायद "एनोटेटेड रेफरेंस मैनुअल" (एआरएम) की तलाश करें? –