Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Указатель на функцию в качестве параметра


Автор: Rost 23.12.2004, 21:38
CRedaktorDoc* pDoc=GetDocument();

CClientDC dc(this);
CClientDC* m_dc;
m_dc=&dc;

(pDoc->m_spisok).Each((pDoc->m_figure)->Draw(m_dc));

Переменные m_spisok и m_figure описаны в CDocument типами CSpisok и CFigure*.

Исходное описание в классе: void CSpisok::Each(void(CElement::*f)(CClientDC* pDC))

CFigure - абстрактный класс, наследуется от CElement, в нём Draw - чистая функция, переопредяляется в наследуемых классах.

Выдаётся единственная ошибка:
D:\Program Files\Microsoft Visual Studio\MyProjects\Redaktor\RedaktorView.cpp(125) : error C2664: 'Each' : cannot convert parameter 1 from 'void' to 'void (__thiscall CElement::*)(class CClientDC *)'

Весь вечер бьюсь, ошибки не вижу ((

Автор: Mad 24.12.2004, 13:34
Цитата(Rost @ 23.12.2004, 20:38)
(pDoc->m_spisok).Each((pDoc->m_figure)->Draw(m_dc));

Переменные m_spisok и m_figure описаны в CDocument типами CSpisok и CFigure*.

Исходное описание в классе: void CSpisok::Each(void(CElement::*f)(CClientDC* pDC))

Ты передаеш не указатель, а результат выполнения функции.

Код

(pDoc->m_spisok).Each((pDoc->m_figure)->Draw, m_dc);

void CSpisok::Each(void(CElement::*f)(CClientDC* pDC), CClientDC *pDC)
{
   f(pDC);
}



Автор: Rost 24.12.2004, 21:29
Mad

К сожалению это тоже работать не будет, т.к. Draw - компонентная функция, а указатель на компонентую функцию явно передать нельзя(.

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