Re: Помогите разрешить проблему на C++
От: Bell Россия  
Дата: 22.07.08 09:39
Оценка: :)
Здравствуйте, Dmitry12345, Вы писали:

void f1(int i);

class a
{
};

class b
{
public:
  void f2();
  a m_a;
};

void f1(int i)
{
   b obj;//Вряд ли это тот объект, для которого нужно вызвать f2
   obj.f2();
}


Однако, вопрос о том, для какого именно объекта класса b нужно вызвать нестатическую функцию-член f2, остается открытым.
Любите книгу — источник знаний (с) М.Горький
Помогите разрешить проблему на C++
От: Dmitry12345  
Дата: 22.07.08 09:02
Оценка:
Привет всем, помогите пожалуйста разрешить проблему на C++. Спасибо всем!



void f1(int i) // callback функция, вызывается, когда приходит i
{
...
// как здесь вызвать b::f2() ???
};

class a
{
...

};

class b
{
public:
  void f2() {...};
  a m_a;
...
};
Re: Помогите разрешить проблему на C++
От: jazzer Россия Skype: enerjazzer
Дата: 22.07.08 09:04
Оценка:
Здравствуйте, Dmitry12345, Вы писали:

D>Привет всем, помогите пожалуйста разрешить проблему на C++. Спасибо всем!



D>

D>void f1(int i) // callback функция, вызывается, когда приходит i
D>{
D>...
D>// как здесь вызвать b::f2() ???
D>};
D>

b::f2() ведь не статическая функция.
Для какого объекта класса b ты ее собираешься вызывать?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: Помогите разрешить проблему на C++
От: fgrdn Земля  
Дата: 22.07.08 09:05
Оценка:
ммм... объявить функцию фрэндом для класса b?
in c/c++ we trust!
Re: Помогите разрешить проблему на C++
От: fgrdn Земля  
Дата: 22.07.08 09:18
Оценка:
аблин, гоню. проблема ж не в видимости. простите.
in c/c++ we trust!
Re: Помогите разрешить проблему на C++
От: ulong Россия  
Дата: 22.07.08 09:51
Оценка:
Обычно, если речь идет о коллбеках, то заводят некий контекст. Т.е. функция f1 выглядела бы так:

void f1( int i, void* pContext )
{
    static_cast<b*>( pContext )->f2(); // например, так
}

void f1( int i, ContextPtr pContext )
{
    pContext->GetB().f2(); // или как-то так
}


Здравствуйте, Dmitry12345, Вы писали:

D>Привет всем, помогите пожалуйста разрешить проблему на C++. Спасибо всем!



D>

D>void f1(int i) // callback функция, вызывается, когда приходит i
D>{
D>...
D>// как здесь вызвать b::f2() ???
D>};

D>class a
D>{
D>...

D>};

D>class b
D>{
D>public:
D>  void f2() {...};
D>  a m_a;
D>...
D>};

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