错误 1 error C2662: “ListNode<T> *list<T>::first(void)”: 不能将“this”指针从“const list<int>”转换为“list<int> &

在写列表类时,遇到了这个问题,调用的函数如下:
ListNodePosi(T) first() const{ return header->succ; };//返回列表的首元素
template T& list::operator[](int r) const
{
ListNodePosi(T) p;
p= first();
while (0 < r–) p = p->succ;
return p->data;
}//重载运算符[];
第一次重载运算符函数定义为const,first()函数没有定义为const报错。
对象引用前加const报错:不能将“this”指针从“const a”转换为“a &”

const a &aa相当于一个const对象,由于const对象在调用成员函数的时候,会将this指针强行转换为const this,所以它将无法找到相应的const show()函数,并且编译器也无法将一个const的对象转化为一个普通对象来调用这个普通的show()方法,所以就会产生如题的编译错误。

结合自己的代码分析了一下这个原因,说白了就是,一个函数定义成了const修饰(即不能通过此成员函数修改成员变量),而如果此函数要嵌套调用其它成员函数,那么这个函数也必须是const修饰的,否则就会报error,其实也好理解,你用一不能修改成员变量的函数来调用可以修改成员变量的函数这本身就是矛盾的,所以C++中不允许这样做。

而网上的这个分析,属于分析道了本质,是一个const对象调用了非const函数,道理上是一样的,希望大家可以从中收获!
https://blog.csdn.net/weixin_37818081/article/details/78079565

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值