में पॉइंटर सरणी की स्थिरता के कारण त्रुटि को जोड़ना यह समस्या -std=c++14
से पहले g ++ में पुन: उत्पन्न होती है। नीचे दिए गए कोड में दिखाए गए const
पर प्रकाश डालने के कारण एक लिंकिंग त्रुटि उत्पन्न होती है। यह गायब हो जाता है, अगर आरएचएस const
हटा दिया गया है।सी ++ 03/सी ++ 11
/* main.cpp */
const char* const arr[2] = {"Hello", "World"};
// ^^^^^
int main() {}
और
/* foo.cpp */
extern const char* const arr[2];
// ^^^^^
const char* foo() { return arr[0]; }
जबकि संकलन: g++ [-std=c++11] main.cpp foo.cpp
, यह निम्न देता जोड़ने त्रुटि:
In function `foo()': undefined reference to `arr'
यह एक संकलक बग या एक भाषा सीमा/सुविधा है?
'नाम स्थान दायरे में const' चर [परोक्ष हैं' static'] (http://stackoverflow.com/questions/33402177/const-global-variable-in-namespace), जब तक आप 'extern' जोड़ें। मुझे यकीन नहीं है कि व्यवहार '-std = C++ 14' के साथ क्यों बदलता है। – Quentin
'बाहरी कॉन्स char * const arr [2] नहीं होना चाहिए;' हेडर फ़ाइल में होना चाहिए जो 'main.cpp' और' foo.cpp' दोनों में शामिल है? – NathanOliver
@ क्वांटिन मुझे यकीन नहीं है कि क्यों ओपी पूर्व सी ++ 14 कहता है, जी ++ 5.1.0 किसी भी मोड में त्रुटि उत्पन्न करता है (सी ++ 14 सी ++ 17), आपकी टिप्पणी जवाब होना चाहिए – Slava