这是 CSpellData.h 中的公共成员:
void (CSpellData::* _vptr)();
它在构造函数中被分配了一个回调,如下所示:
_vptr = GetCallbackFromID(spell_id);
哪里
void (CSpellData::* CSpellData::GetCallbackFromID(ESpellID spell_id))() {
switch (spell_id) {
case ESpellID::FIREBALL:
return &CSpellData::FireballCallback;
case ESpellID::STONESKIN:
return &CSpellData::StoneskinCallback;
default:
break;
}
}
现在在我的 Spell.h 中,我有一个指向 CSpellData 的指针,如下所示:
const CSpellData* _c_spell_data;
问题: 我现在如何使用 _c_spell_data 指针调用 _vptr 指向的函数?
ChatGPT 一个多小时都帮不了我,一直给我这样的回复:
//(c_spell_data.*c_spell_data._vptr)();
//(c_spell_data->*_vptr)();
//_c_spell_data->_vptr();
所有这些都会给出关于带有 0 个参数的函数的错误等等。它编译的唯一方法是这样的:
_c_spell_data->vptr;
但是回调实际上并没有触发。
请帮助我! 预先感谢
我尝试了一切,从引用指针,到 const 转换,再到询问 chatGPT。
我解决了它,谢谢你指出了这个问题。现在我只是不在构造函数中使用 const 并且它可以工作。谢谢。