You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

void*类型成员调用方法报错,如何通过接口访问泛型对象方法?

问题解决方法

错误的核心原因是你用了void*类型的指针——void*是无类型指针,编译器无法识别它指向的对象具备accessBlock方法,自然不允许直接调用成员函数。既然你明确所有被指向的对象都继承了InterfaceProtocol接口,完全不需要用void*,直接用基类指针就能实现多态调用。

步骤1:修改SACache类的成员变量类型

把void* next改成InterfaceProtocol* next,让编译器识别这是一个实现了InterfaceProtocol接口的对象指针:

class SACache : public InterfaceProtocol{
    InterfaceProtocol* next; // 替换void*为基类指针
    virtual void accessBlock(unsigned long int address, unsigned long int size, bool read);
};

步骤2:修正成员函数的调用方式

因为next现在是指针类型,调用成员方法时需要用->而非.:

void SACache::accessBlock(unsigned long int address, unsigned long int size, bool read){
   // 注意:需确保blockAddress、blockSize是已定义的变量,YES是有效的bool值
   next->accessBlock(blockAddress, blockSize, YES);
}

额外注意事项

  • 要保证next指针指向的对象确实是继承自InterfaceProtocol的实例,否则运行时会出现未定义行为。
  • 记得管理好next指针的内存,比如避免空指针调用、正确释放资源,防止内存泄漏或野指针问题。

内容的提问来源于stack exchange,提问作者Hans Carrizales

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 06:45:03