typedef void (__cdecl *f1)(void);
class _myclass
{
private:
f1 external;
public:
static void f2(void);
_myclass();
~_myclass();
};
Вопрос по классам C++.
Совсем недавно столкнулся с проблемой и пока не могу ее разрешить, поскольку с подобным ранее не сталкивался.
Ситуация в следующем:
к примеру,
typedef void (__stdcall *f1)(void);
class _myclass
{
private:
f1 external;
public:
void f2(void);
_myclass();
~_myclass();
};
_myclass::f2(void){}
_myclass::_myclass(void)
{
external=f2;
}
При компиляции выдается ошибка:
error C2440: '=' :
cannot convert from 'void (__stdcall _myclass::*)(void)' to 'void (__stdcall *)(void)';
Подскажите - в чем здесь проблема - и как ее можно устанить - очень надо. А раньше с такой проблемой на MSVC сталкиваться не приходилось.
Так вроде работает
Цитата:
Originally posted by Hearse
Так вроде работает
Так вроде работает
Код:
typedef void (__cdecl *f1)(void);
class _myclass
{
private:
f1 external;
public:
static void f2(void);
_myclass();
~_myclass();
};
class _myclass
{
private:
f1 external;
public:
static void f2(void);
_myclass();
~_myclass();
};
Спасибо за совет - действительно так скомпилилось.
Только возник другой прикол - если я объявляю функцию как static - компиляться оно компиляется - да только из static member класса я не могу вызывать non-static member класса - опять компилятор матюкается. Можно-ди как-нибудь в данной ситуации обойтись не объявляя static?
typedef void (_myclass::*f1)(void);
class _myclass
{
private:
f1 external;
public:
void f2(void);
_myclass();
~_myclass();
};
_myclass::f2(void){}
_myclass::_myclass(void)
{
external=&_myclass::f2;
}
Так можно обойтись без static
Цитата:
Originally posted by srd
// указатель на функцию-член
typedef void (_myclass::*f1)(void);
class _myclass
{
private:
f1 external;
public:
void f2(void);
_myclass();
~_myclass();
};
_myclass::f2(void){}
_myclass::_myclass(void)
{
external=&_myclass::f2;
}
Так можно обойтись без static
// указатель на функцию-член
typedef void (_myclass::*f1)(void);
class _myclass
{
private:
f1 external;
public:
void f2(void);
_myclass();
~_myclass();
};
_myclass::f2(void){}
_myclass::_myclass(void)
{
external=&_myclass::f2;
}
Так можно обойтись без static
Спасибо огромное за помощь!