c++ - Friend function is not visible in the class -


मेरे पास निम्न कोड है:

  struct M {दोस्त शून्य f () {} एम () {एफ (); // त्रुटि: इस क्षेत्र में 'एफ' को घोषित नहीं किया गया}}; Int main () {M m; }  

दोनों g ++ 4.8 और clang3.4 इसे संकलित करने में असफल, क्योंकि f अंदर एम दिखाई नहीं दे रहा है , या तो वे कहते हैं।

हालांकि, मानक समान कोड का एक उदाहरण देता है

  class M {friend void f () {} // ग्लोबल च की परिभाषा, एम के एक दोस्त, // सदस्य समारोह की परिभाषा नहीं;};  

और कहते हैं कि

एक वर्ग में परिभाषित एक मित्र फ़ंक्शन वर्ग के (लेक्सिकल) दायरे में है जिसमें इसे परिभाषित किया गया है।

(आईएसओ / आईईसी 14882: 2011 11.3 मित्र [क्लास। मित्र] पी 6, पी 7)

इससे मैं समझ नहीं सकता कि कम्पाइलर कैसे कर सकता है f नहीं मिलती है, जिसे उसी वर्ग में परिभाषित किया जाता है जहां इसका इस्तेमाल होता है।

यह थोड़े लगने की संभावना है कि दोनों कंपलर्स को एक ही बग है।
तो, मुझे क्या याद आया? < / P>

मित्र घोषणा कहती है कि आसपास के नामस्थान में f नामक फ़ंक्शन एक है कक्षा का मित्र; लेकिन यह नाम f नाम स्थान में शुरू नहीं करता है यह उपलब्ध नहीं है (तर्क-आश्रित लुकअप को छोड़कर) जब तक यह नामस्थान में घोषित नहीं किया जाता है।

प्रासंगिक नियम C ++ 11 7.3.1.2/3:

यदि कोई गैर-स्थानीय कक्षा में कोई मित्र घोषणा पहले एक वर्ग या फ़ंक्शन को घोषित करता है तो मित्र वर्ग या फ़ंक्शन अंतराल संलग्न नामस्थान का सदस्य होता है।

<

Comments

Post a Comment

Popular posts from this blog

c++ - Cmake produces file extensions in static library archives -

c# - Roxy file manager in MVC doesn't accept session path -

c# - Check if a NumericUpDown has no value -