出现C2662错误的原因是调用了一个常量对象的非常函数举个例子如下
class C
{
public:
void func1(); //非常函数
void func2() const; //常函数
} const d; //还可以这样定义常量对象
const C c;
//如果如下面调用
c.func1();//错误
d.func1();//错误
会出现编译错误,为什么呢,我们想一下,
因为c,d是常量对象,那么这两个对象内的成员变量的值就不能改动,如果你用c,d调用它们的非常量函数,就不能保证这个函数是否改动了成员变量的值.
而常函数的功能我们是知道的,常函数如func2的定义方式就是常函数,它内部是不允许改变成员变量的值的.
所以总结如下,常量对象只能调用常函数