मैं आज कुछ कोड लिख रहा था और एक अजीब संकलन त्रुटि मिली, जो कि घोषित किए गए अनुसार अलग-अलग क्रम में सदस्य चर को प्रारंभ करने के कारण होता है।मुझे सदस्य चर को किस क्रम में घोषित किया जाना चाहिए?
उदाहरण:
class Test {
int a;
int b;
public:
Test() : b(1), a(2) {
}
};
int main() {
Test test;
return 0;
}
फिर अगर मैं इसे संकलन
-Werror -Wall
साथ
:
$ g++ -Werror -Wall test.cpp
test.cpp: In constructor ‘Test::Test()’:
test.cpp:3:9: error: ‘Test::b’ will be initialized after [-Werror=reorder]
test.cpp:2:9: error: ‘int Test::a’ [-Werror=reorder]
test.cpp:6:5: error: when initialized here [-Werror=reorder]
cc1plus: all warnings being treated as errors
मुझे लगता है कि -Wall
स्पष्ट रूप से जीसीसी पूछ रहा है से शीर्ष पर चेतावनी के साथ जाने के लिए, लेकिन मैं वहाँ मान उन सभी के लिए एक कारण है। तो, सदस्य चर शुरू करने का आदेश कैसे मायने रख सकता है?
- संदेशों के संकेत के रूप में आतंक, संकलक को सभी चेतावनियों को त्रुटियों के रूप में समझने के लिए कहता है। लिखित कोड मान्य है और इसका अर्थ अच्छी तरह से परिभाषित है (हालांकि इसे इस तरह लिखने के लिए उचित तर्क नहीं हैं), लेकिन -फायर के साथ, संकलक मानक के अनुरूप नहीं है क्योंकि यह वैध कोड संकलित करने से इंकार कर देता है। उदाहरण के लिए –