कोड पर विचार करें:सी ++ वैश्विक extern "सी" दोस्त namespaced वर्ग पर निजी सदस्य नहीं पहुँच सकते हैं
> g++ -Wall -o extern_c extern_c.cpp
extern_c.cpp: In function ‘void foo()’:
extern_c.cpp:20:7: error: ‘static void A::Bar<No>::private_func(int) [with int No = 0]’ is private
extern_c.cpp:29:31: error: within this context
मैं टिप्पणी तो namspace A
, यह संकलन होगा:
#include <iostream>
using namespace std;
extern "C"
void foo(void);
namespace A
{
template< int No >
class Bar
{
private:
friend void ::foo(void);
static void private_func(int n);
};
template< int No >
void Bar<No>::private_func(int n)
{
cout << "A:Bar< " << No << ">::private_func(" << n << ")" << endl;
}
}
extern "C"
void foo(void)
{
A::Bar<0>::private_func(1);
}
int main()
{
cout << " ---- " << endl;
foo();
}
जी ++ देता है और सही ढंग से चलाएं।
मुझे क्या याद आ रही है?
मैंने संबंधित विषयों को देखा, लेकिन मेरी समस्या में कोई भी फिट नहीं मिला।
- C++: namespace conflict between extern "C" and class member
- Why this friend function can't access a private member of the class?
धन्यवाद लोग।
संपादित करें:
मैं अब आश्वस्त extern "C"
समस्या से कोई लेना-देना नहीं है कि कर रहा हूँ। कृपया इसे अनदेखा करें।
नामस्थान पर अपना असली 'foo() 'रखना आसान नहीं होगा क्योंकि यह एक इंटरप्ट सेवा रूटीन है, लेकिन मैं इसे वैसे भी कोशिश करूंगा। धन्यवाद। – j4x
मुझे लगता है कि इस लड़के को एक ही समस्या है, लेकिन न ही जवाब दिया गया है: http://stackoverflow.com/questions/2236712/how-do-i-define-a-friend-class-from-the-global-namespace- इन-एंड-नेमस्पेस –
यह एक ही समस्या प्रतीत होता है, लेकिन खाली नामस्थान सुझाव काम नहीं करता है। मुझे एक ही त्रुटि दिखाई देती है। – j4x