friends in namespace
От: Mechanicus Беларусь  
Дата: 11.10.04 10:29
Оценка:
Допустим есть такая ситуация:

namespace a
{
namespace b
{
    class C
    {
         struct D
         {
              int id;
         };
         D descr;

         friend bool operation <(int lhs, const C::D &rhs);
    };
   
    bool operation <(int lhs, const C::D &rhs)
    {
        retrun lhs == descr.id;
    }
}
}


Правильно ли объявлена другом эта операция сравнения? GCC такое компилит на ура, а VC7.1 не хочет. Пишет, что cannot access private struct declared in class 'a::b::C::D'. Кто не прав, а главное как это исправить?
Re: friends in namespace
От: Аноним  
Дата: 11.10.04 11:09
Оценка:
amespace a
{
namespace b
{
class C
{
struct D
{
int id;
};
D descr;

friend bool operator <(int lhs, const C::D &rhs);
};

bool operator <(int lhs, const C::D &rhs)
{
return lhs == rhs.id;
}
}
}

vc 7.1 замечательно компиллируется
Re[2]: friends in namespace
От: Mechanicus Беларусь  
Дата: 11.10.04 11:16
Оценка:
Здравствуйте, Аноним, Вы писали:

...skip...
А>vc 7.1 замечательно компиллируется
А, да. пример немного не правильный, но задо решение проблемы найдено.
Проблема возникает если в .h файле есть только объявление опреации, а тело в .cpp
bool a::b::operator <(int lhs, const C::D &rhs)
{
    return lhs == rhs.id;
}
Re[3]: friends in namespace
От: folk Россия  
Дата: 11.10.04 13:40
Оценка:
"Mechanicus" <4956@news.rsdn.ru> wrote in message news:846486@news.rsdn.ru...

[]

> Проблема возникает если в .h файле есть только объявление опреации, а тело в .cpp

>
> bool a::b::operator <(int lhs, const C::D &rhs)
> {
> return lhs == rhs.id;
> }
>


Ишь чего захотел. Надо так
namespace a { namespace b {
bool operator <(int lhs, const C::D &rhs)
{
  return lhs == rhs.id;
}
} }
Posted via RSDN NNTP Server 1.9 gamma
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
Re[4]: friends in namespace
От: Mechanicus Беларусь  
Дата: 11.10.04 15:22
Оценка:
Здравствуйте, folk, Вы писали:

>> Проблема возникает если в .h файле есть только объявление опреации, а тело в .cpp

>>
>> bool a::b::operator <(int lhs, const C::D &rhs)
>> {
>> return lhs == rhs.id;
>> }
>>


F>Ишь чего захотел. Надо так

F>
F>namespace a { namespace b {
F>bool operator <(int lhs, const C::D &rhs)
F>{
F>  return lhs == rhs.id;
F>}
F>} }
F>


Да, некрасиво как-то получается. Это требование стандарта, или причуды vc?
Re[5]: friends in namespace
От: ssm Россия  
Дата: 11.10.04 15:48
Оценка:
Здравствуйте, Mechanicus, Вы писали:


M>Это требование стандарта

ага
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.