Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

C++: дружественные функции внутри своего пространства имен

245
13 ноября 2010 года
~ArchimeD~
1.4K / / 24.07.2006
main.cpp:
 
Код:
#include "test.h"
int main ()
{
    test Test;
    //test_ns::test Test;
    return 0;
}

test.h:
 
Код:
//namespace test_nsgcc version 4.5.1
//{
    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;  
}

Таким образом все видится и собирается. Если же раскомментировать использование пространства имен 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

11
13 ноября 2010 года
oxotnik333
2.9K / / 03.08.2007
//namespace test_nsgcc
//using namespace test_ns;
не?
 
Код:
void test_ns::test_friend(test &ob)
{
    ob.a=5;
}
245
13 ноября 2010 года
~ArchimeD~
1.4K / / 24.07.2006
О! вот так вот вроде проканало
 
Код:
void test_ns::test_friend(test &ob)
{
    ob.a=5;
}

Код:
namespace test_ns
{

    class test
    {
    private:
        int a;
    public:
        friend void test_friend (test &ob);
    };

    void test_friend (test &ob);
}


Спасибо
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог