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
相关产品推荐
相关产品推荐

