यह Undefined reference to static constexpr char[][] पर एक अनुवर्ती प्रश्न है।constexpr स्थिर सदस्य चर के साथ अजीब व्यवहार
निम्न प्रोग्राम बनाता है और ठीक चलाता है।
#include <iostream>
struct A {
constexpr static char dict[] = "test";
void print() {
std::cout << A::dict[0] << std::endl;
}
};
int main() {
A a;
a.print();
return 0;
}
हालांकि, अगर मैं A::print()
बदलें:
void print() {
std::cout << A::dict << std::endl;
}
मैं जी में ++ 4.8.2 निम्नलिखित लिंकर त्रुटि मिलती है।
constexpr char A::dict[];
वर्ग परिभाषा के बाहर
:
/tmp/cczmF84A.o: In function `A::print()': socc.cc:(.text._ZN1A5printEv[_ZN1A5printEv]+0xd): undefined reference to `A::dict' collect2: error: ld returned 1 exit status
लिंकर त्रुटि एक पंक्ति जोड़कर हल किया जा सकता।
हालांकि, यह मुझे स्पष्ट नहीं है कि सरणी के सदस्यों में से किसी एक का उपयोग करने से लिंकर त्रुटि का कारण बनता है जब एरे का उपयोग करते समय लिंकर त्रुटि होती है।
क्योंकि पूर्व को एक मूल्य की आवश्यकता है, जबकि बाद वाले को एक पते की आवश्यकता है? –
दोनों ओडीआर-उपयोग हैं, मुझे लगता है। आपको 'dict [0] 'मामले में भाग्यशाली (अन) भाग्यशाली मिला। –
क्लैंग आपके पहले संस्करण को पसंद नहीं करता है, वही अपरिभाषित संदर्भ संदेश आपके दूसरे संस्करण के साथ देता है। – hvd