templates - C++ Compiler error with CRTP -
मेरे पास निम्न श्रेणी के पदानुक्रम हैं:
टेम्पलेट & lt; typename T & gt; वर्ग आधार {सार्वजनिक: शून्य एफ () {}}; कक्षा class_a: सार्वजनिक आधार & lt; class_a & gt; {}; कक्षा class_b: सार्वजनिक आधार & lt; class_b & gt ;, सार्वजनिक class_a {आधार & lt; class_b & gt; :: f; }; Int main () {class_b b; b.f (); वापसी 0; }
कमु और इंटेल सी + + वी 11 का दावा सभी अच्छी तरह से है, हालांकि जीसीसी (4.4.1) और वीसी ++ 2008 शिकायत करते हैं (उदाहरण के लिए):
G ++ -pedantic -Wall -o test test.cpp test.cpp: फ़ंक्शन 'int main ()': test.cpp: 5: त्रुटि: 'शून्य आधार & lt; T & gt; :: f () [T = class_b] के साथ' अपठनीय test.cpp: 14: त्रुटि: इस संदर्भ में
मुझे विश्वास है कि यह कोड अच्छी तरह से बना है क्योंकि यह है, हालांकि मैं गलत हो सकता है, मैं किसी को SO C ++ से उम्मीद कर रहा हूं समुदाय इस मुद्दे पर कुछ अंतर्दृष्टि प्रदान कर सकता है।
नोट: class_b में उपयोग किए जाने वाले डायरेक्टिव से पहले "सार्वजनिक" जोड़ना, जीसीसी और वीएस दोनों के लिए समस्या का निराकरण करता है। क्या क्लास के एक्सेसर सेक्शन में उपयोग किए गए निर्देश बेस क्लास के व्युत्पत्ति मोड (सार्वजनिक, निजी) को ओवरराइड कर दिया जाता है?
संक्षेप में यह
- ए कंपाइलर त्रुटि - यदि ऐसा है तो कम्पाइलर जीसीसी, वीएस या कमू, इंटेल
- क्या उपरोक्त कोड अच्छी तरह से बनता है?
- क्या एक्सेसर अनुभाग में उपयोग करने वाले डायरेक्टिव को व्युत्पत्ति मोड ओवरराइड कहा जाता है आधार का
आप यहां क्या कर रहे हैं, यह आयात करने से अस्पष्टता को हल कर रहा है वर्गों निजी नाम स्थान में प्रतीक इसलिए यह विधि को छिपाने और इसे निजी रूप से दृश्यता बदल रहा है
कम से कम जीसीसी एक फ़ंक्शन का मानना है।
हालांकि अस्पष्ट संदर्भ में पाया, तथ्य यह है कि दायरे से प्रभावित नहीं होना चाहिए
सबसे महत्वपूर्ण बात, एक सीधा जवाब (सी ++ मानक '03 - 7.3.3 / 15)
उपयोग-घोषणा द्वारा बनाए गए उपनाम के लिए सामान्य पहुंच है सदस्य घोषणा।
इसलिए जवाब होगा:
- यह कमौ में एक बग है
- नहीं, कोड ठीक नहीं है
- हाँ, आप एक्सेस का दायरा बदल सकते हैं
Comments
Post a Comment