const 函数调用类的非const成员函数报错

来源:互联网 发布:mac os x leopard下载 编辑:程序博客网 时间:2024/06/14 00:50
class Abstract{public:virtual void foo() = 0;};class Derived : public Abstract{public:virtual void foo(){std::cout << "Derived::foo()" << std::endl;}};void PrintAbstract(const Abstract &a){a.foo();}int main(){Derivedd;PrintAbstract(d);}class Abstract{public:virtual void foo() const = 0;};class Derived : public Abstract{public:virtual void foo() const{std::cout << "Derived::foo()" << std::endl;}};
报错:
error: passing 'const Abstract' as 'this' argument of 'virtual void Abstract::foo()' discards qualifiers
原因:const函数PrintAbstract()调用类中的非const函数foo()
解决方法:
将foo()函数声明为const函数:
class Abstract{public:virtual void foo() const = 0;};class Derived : public Abstract{public:virtual void foo() const{std::cout << "Derived::foo()" << std::endl;}};