में टकरा मैं नहीं समझ सकता क्यों कोड के इस टुकड़े को संकलित नहीं करता है:नामस्थान सी ++
namespace A {
class F {}; // line 2
class H : public F {};
}
namespace B {
void F(A::H x); // line 7
void G(A::H x) {
F(x); // line 9
}
}
मैं gcc 4.3.3
उपयोग कर रहा हूँ, और त्रुटि है:
s3.cpp: In function ‘void B::G(A::H)’:
s3.cpp:2: error: ‘class A::F’ is not a function,
s3.cpp:7: error: conflict with ‘void B::F(A::H)’
s3.cpp:9: error: in call to ‘F’
मुझे लगता है कि क्योंकि लाइन 9 में कोई नामस्थान उपसर्ग नहीं है, F(x)
निश्चित रूप से केवल B::F(x)
का मतलब होना चाहिए। संकलक x
को अपने सुपरक्लास में डालने का प्रयास करता है। मेरी समझ में यह नहीं होना चाहिए। वह ऐसा क्यों करता है?
तथाकथित कोएनिग लुकअप, वास्तव में, धारा 3.4 में वर्णित है।सी ++ मानक के 2। –
फिर यदि वीएस इसे संकलित करता है, तो यह एक बग है? – liori
क्या आप उस कथन का संदर्भ पा सकते हैं? मैंने कभी इस तरह के किसी भी नियम के बारे में नहीं सुना है ... – xtofl