Суть проблемы такова:
В проекте есть 2 класса CQuery, CTest (соответственно в файлах
query.h и test.h)
Класс CTest использует объект класса CQuery и соответственно в файле
CTest есть строка
#include"query.h"
Теперь нужные части из классов:
class CQuery
{
public:
void (*pFunc)(int);
}
class Test : public CFormView
{
private:
void Func (int);
void Run ();
}
void Test::Run()
{
CQuery Query;
Query.pFunc = Func;
}
На самое последнее присваивание ругается:
cannot convert from 'void (__thiscall Test::*)(int)' to 'void (__cdecl *)(int)'
There is no context in which this conversion is possible
Если обявить функцию Run как
static void
все работает. Почему?
Мне не нужно static void.
Как сделать без него?
PS
Причем не могу в классе CQuery написать
void (Test::*pFunc)(int);
Потому как нету в этом файле includ'а на test.h, да и не может быть.
Re: Инициализация указателя на функцию другого класса
Здравствуйте, golova_, Вы писали:
_> Суть проблемы такова: _> В проекте есть 2 класса CQuery, CTest (соответственно в файлах _> query.h и test.h) _> Класс CTest использует объект класса CQuery и соответственно в файле _> CTest есть строка _>
Здравствуйте, Анатолий Широков, Вы писали:
АШ>Здравствуйте, golova_, Вы писали:
_>>Здравствуйте, Анатолий Широков, Вы писали:
АШ>>>
АШ>>>class CTest; // forward declaration
АШ>>>class CQuery
АШ>>>{
АШ>>>public:
АШ>>> void (CTest::*pFunc)(int);
АШ>>> CTest *prt;
АШ>>> void Notify()
АШ>>> {
АШ>>> (ptr->*pFunc)(0);
АШ>>> }
АШ>>>};
АШ>>>
_>>К сожалению из файла query.h (класс CQuery) не видать файл test.h, в test.h есть include "query.h".
АШ>Так этого и не надо. То что Вам нужно — это forward declaration. И никаких инклудов делать не надо.
Спасибо большое! Заработало.
А вот тут еще вопросик. А что если у меня много таких Test'ов. CTest1, CTest2.... Для всех них, я конечно forward declaration сделаю. А можно ли использовать один и тот же указатель для всех классов? Как бы это удобней сделать?
Re[5]: Инициализация указателя на функцию другого класса
_>Спасибо большое! Заработало. _>А вот тут еще вопросик. А что если у меня много таких Test'ов. CTest1, CTest2.... Для всех них, я конечно forward declaration сделаю. А можно ли использовать один и тот же указатель для всех классов? Как бы это удобней сделать?