Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Передать указатель на функцию


Автор: shedon 12.9.2003, 10:28
Код

void BeginMeas(void (*fShow)());
void ShowData(void);

BeginMeas(pСCheckingDlg->ShowData);


Компилятор выдает ошибку о не соответствии типов:
Цитата

error C2664: 'CMeasurement::BeginMeas' :
cannot convert parameter 1 from 'void (void)' to 'void (__cdecl *)(void)'

Автор: RAN 12.9.2003, 11:03
Цитата
pСCheckingDlg->ShowData

Так у тебя класс же. Значит функция вызывается как __thiscall. Если функция ShowData не виртуальна, то можешь её сделать static и код будет работать, но придётся в неё this передавать.
Код

void BeginMeas(void (*fShow)(ССlass*));
void ShowData(ССlass* This);

BeginMeas(pСCheckingDlg->ShowData);

.................
//Работать с классом из BeginMeas придётся так:
void ССlass::BeginMeas(void (*fShow)(ССlass*))
{
 fShow(this);
}

void CClass::ShowData(ССlass* This)
{
 This->x //только так получишь доступ к экземпляру класса
}

Это по сути и есть thiscall.

Автор: shedon 12.9.2003, 11:32
Цитата

void CClass::ShowData(ССlass* This)
{
This->x //только так получишь доступ к экземпляру класса
}

А мне это и не надо.
ShowData относиться к третьму классу СCheckingDlg.
BeginMeas к CMeasurement
А вызывает его функция из CSetParCheckDlg
В общем наверное будет проще без указателя на функцию обойтися, передать просто this класса CSetParCheckDlg, а через него получить доступ к pСCheckingDlg->ShowData()

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)