我已经退出了一个需要修复的大项目,有一个我自己无法解决的错误:
class CEntity
{
public:
CStudioHdr * GetModelPtr();
public:
CStudioHdr * InternalGetModelPtr();
static CStudioHdr * (ThisClass::* GetModelPtr_Actual) ();
}
这是投射到的函数:
class GenericClass {};
typedef void (GenericClass::*VoidFunc)();
inline void *GetCodeAddr(VoidFunc mfp)
{
return *(void **)&mfp;
}
该行,不允许我编译该项目:
void *callback = (void *)GetCodeAddr(reinterpret_cast<VoidFunc>(&CEntity::InternalGetModelPtr));
我收到此错误:
error C2440: 'reinterpret_cast' : cannot convert from 'CStudioHdr *(__thiscall CEntity::* )(void)' to 'VoidFunc'
我认为msvc编译器有问题:
可重复的时刻是另一个类:
class CAnimating : public CEntity
{
如果我将此函数移动到此类中,则没有错误。 我不确定这是否是获取无效指针的最佳方法,对于Linux也是正确的吗?