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

在写列表类时,遇到了这个问题,调用的函数如下:
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

你可能感兴趣的:(工作日志)