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

C++中为何无法通过该方式访问fun()?报非指针类型错误

错误原因

你看到的“C++ Operators -> and ->* Applied to Non-Pointer Types”错误,本质是在非指针类型上误用了->运算符。

拆解你的代码行_This->_b[1]->fun():

  • _This->_b是b*类型(指向b对象的指针)
  • 对指针用[1],等价于*( _b + 1 ),这会直接解引用得到一个**b类的实例对象**(不是指针)
  • 你接着对这个b对象用->,但->只能用在指针或者重载了operator->的类型上,所以编译器直接报错。
修复方法

从你的代码逻辑看,你是想通过b类的operator[]获取c的指针,再调用fun()。正确的写法有两种:

写法一:先解引用指针,再调用下标运算符

(*_This->_b)[1]->fun();

(*_This->_b)先把b*解引用成b对象,然后调用operator[](1)返回c*,最后用->调用fun(),完全符合语法要求。

写法二:直接调用成员函数形式的下标运算符

_This->_b->operator[](1)->fun();

这种写法更直白,直接通过指针调用b类的operator[]成员函数,效果和写法一完全一致。

另外提个醒:你的a类构造函数里直接用_This,但这个静态指针必须在构造函数执行前完成初始化(比如指向当前实例),否则会触发未定义行为,这部分要注意排查。

内容的提问来源于stack exchange,提问作者feng lei

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 08:37:20