今天在写c++代码时,遇到如下的编译错误
Error:Can not convert 'this' pointer to 'const class XXX'

多次查看代码后,都没发现什么错误,后来在这里发现错误的原因。

为了说明的方便,引用一段Error代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class A
{
int num;
public:
int get_num() { return num; }
};
void test(const A& a)
{
a.get_num();
};
int main()
{
A a;
test(a);
return 0;
}

出错的地方就是在test函数调用get_num函数地方里。

错误原因:test函数接收的函数形参是const A&, 即class A的const引用,
而在test函数体中调用了class A中的get_num方法。
在C++中,对于const的对象,不能够调用对象的非const函数(理由很简单, const对象意味这对象里面的所有成员都不能够被修改,如果你调用对象中的一个方法,这个方法修改了对象里面某个成员,那么就会造成矛盾)

错误解决也很简单,有两种:

  1. get_num函数用const修饰(get_num函数就不会修改class A的成员)
  2. 把test函数的形参从const A&改成A&,即把const去掉