代码如下:
#include <iostream>
class Base{
public:
virtual void print(){
std::cout << "Base print" << std::endl;
}
};
class Derived : public Base{
public:
virtual void print(){
std::cout << "Derived print" << std::endl;
}
};
void call(const Base& base){
base.print();
}
int main(int argc, char** argv) {
Derived a;
call(a);
return 0;
}
错误原因:
在void call(const Base& base)函数中传递的参数是const类型的base,base是不允许被更改的,但是在call()函数内部却调用了非const类型的print()函数,编译器会以为你要改变base,所以就报错
改正
将基类和派生类的print()函数改为constle类型,修改如下:
#include <iostream>
class Base{
public