#include "test.h"
int main ()
{
test Test;
//test_ns::test Test;
return 0;
}
C++: дружественные функции внутри своего пространства имен
Код:
test.h:
Код:
//namespace test_nsgcc version 4.5.1
//{
class test
{
private:
int a;
public:
friend void test_friend (test &ob);
};
//}
//{
class test
{
private:
int a;
public:
friend void test_friend (test &ob);
};
//}
test.cpp:
Код:
#include "test.h"
//using namespace test_ns;
void test_friend(test &ob)
{
ob.a=5;
}
//using namespace test_ns;
void test_friend(test &ob)
{
ob.a=5;
}
Таким образом все видится и собирается. Если же раскомментировать использование пространства имен test_ns и попытаться собрать,
Цитата:
test.h: In function ‘void test_friend(test_ns::test&)’:
test.h:6:13: error: ‘int test_ns::test::a’ is private
test.cpp:7:8: error: within this context
Вопрос: каким образом перебороть, использовать и пространство имен, и дружественную функцию? Сталкиваюсь впервые, гугл выдает ссылки на рассуждения по пространству имен и по дружественным функциям по отдельности. Сам сообразить, почему так происходит и как правильно написать, сходу не могу.
З.Ы.: gcc version 4.5.1
//using namespace test_ns;
не?
Код:
void test_ns::test_friend(test &ob)
{
ob.a=5;
}
{
ob.a=5;
}
Код:
void test_ns::test_friend(test &ob)
{
ob.a=5;
}
{
ob.a=5;
}
Код:
namespace test_ns
{
class test
{
private:
int a;
public:
friend void test_friend (test &ob);
};
void test_friend (test &ob);
}
{
class test
{
private:
int a;
public:
friend void test_friend (test &ob);
};
void test_friend (test &ob);
}
Спасибо