Re: Проблема доступа к членам класса из вложенного
От: folk Россия  
Дата: 10.12.04 05:04
Оценка:
adr:

>
> namespace server_lib
> {
> class TTraceSound
> {
[]
> void Trace(eTraceMessageType, const char*, ...);
> 
> public:
> class TAnonymousAdapter
> {
> public:
> void Trace(eTraceMessageType, const char*, ...);
> };
[]
> };
> 
> }; // END OF NAMESPACE
>

>
> Так почему же его нельзы вызвать из метода Trace класса TAnonymousAdapter
> using namespace server_lib;
>
>
> //----------------------------------------------------------
> void TTraceSound::TAnonymousAdapter::Trace(eTraceMessageType, const char*, ...)
> {
> TTraceSound::Play(); // Здесь error C2352
> }
> //----------------------------------------------------------
>

>
> И какой же тогда смысл в объявлении классов как вложенных впринципе, если нет доступа к мемберам внешнего?

У вложенного класса в С++ есть доступ к членам внешнего, но нет неявного указателя на экземпляр внешнего. Можно добавить его явно:
class TTraceSound
{

  void Trace(eTraceMessageType, const char*, ...);

 public:
  class TAnonymousAdapter
  {
   public:
    void Trace(eTraceMessageType, const char*, ...) { outer_->Trace(...); }

   private:
    friend class TTraceSound;
    TAnonymousAdapter(TTraceSound* outer): outer_(outer) {}
    TTraceSound* outer_;
  };
};


PS Точка запятой здесь является ошибкой:
namespace server_lib {...};
Posted via RSDN NNTP Server 1.9 delta
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.