[Error] passing 'const Base' as 'this' argument of 'virtual void Base::print()' discards qualifiers

代碼如下:

#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:
	virtual void print() const{
		std::cout << "Base print" << std::endl;
	}
};

class Derived : public Base{
	public:
	virtual void print() const{
		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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章