मैं ऑपरेटरों नाम स्थान my_namespace
में वर्ग my_type
के लिए घोषित की है।जीसीसी failes उपसर्ग नाम स्थान के साथ ऑपरेटर परिभाषा को संकलित करने के
namespace my_namespace {
class my_type
{
friend std::ostream& operator << (std::ostream& out, my_type t);
}
}
मैं कार्यान्वयन फ़ाइल में इन ऑपरेटरों को परिभाषित करने के कोशिश कर रहा हूँ, लेकिन जब मैं कि
std::ostream& my_namespace::operator << (std::ostream& out, my_type t)
{
out << t;
return out;
}
की तरह कुछ लिखने मैं
error: ... operator should have been declared inside 'my_namespace'
जब मैं इसे बदल त्रुटि संदेश मिलता है
namespace my_namespace {
std::ostream& operator << (std::ostream& out, my_type t)
{
out << t;
return out;
}
}
को
तो यह संकलित है, लेकिन मुझे समस्या को समझ में नहीं आता है। यह संकलन करने में विफल क्यों है? क्या उसके साथ सब ठीक है? मैं मानक के लिंक की सराहना करता हूं क्योंकि मुझे वास्तव में पता नहीं है कि खोजना क्या है।
file.h
#ifndef A_H
#define A_H
#include <iosfwd>
namespace N
{
class A
{
friend std::ostream& operator << (std::ostream& out, A& obj);
};
}
#endif
file.cpp
#include "file.h"
#include <iostream>
std::ostream& N::operator << (std::ostream& out, N::A& obj)
{
return out;
}
int main() {}
यहाँ पूरा उदाहरण है जोड़ा। यह वीएस -2010 पर ठीक काम करता है, लेकिन जीसीसी 4.4.5 पर उपर्युक्त त्रुटि देता है।
हम्म ... हाँ, यह एक काम करता है
namespace N
{
class A
{
friend std::ostream& operator << (std::ostream& out, A& obj);
};
std::ostream& operator << (std::ostream& out, A& obj);
}
मैं हमेशा दृश्यता कक्षा में दोस्त ऑपरेटर घोषित करने के मामले में सोच रहा था कि वर्ग की घोषणा के बाहर के रूप में एक ही बात है जोड़ा .. ऐसा लगता है कि यह नहीं है। धन्यवाद।
अग्रिम में बहुत धन्यवाद।
जीसीसी में, '-फ्रीएंड-इंजेक्शन' विकल्प के साथ इसे संकलित करना सफल होगा। – user7610