我必须像这样抛出一个指针。我想在主类中调用Derived函数。
using namespace std;
class Base
{
public:
virtual ~Base() {};
virtual const char * what() { return "Base"; };
int value = 0;
};
class Derived : public Base
{
public:
~Derived() {};
const char * what() { return "Derived"; };
int value = 1;
};
int main()
{
try
{
throw new Derived();
}
catch (Base const * b)
{
//HOW TO CALL b->what();
delete b;
}
}
当我尝试调用what()函数时,出现错误该对象具有与成员函数“ Base :: what”不兼容的类型限定符
你能告诉我一个解决方案吗?
谢谢。
答案 0 :(得分:1)
Base const* b
表示b
是指向不可变对象(常量对象)的指针。在c ++中,一个不可变的对象只能使用const方法,const方法的一个示例是:
class Base
{
public:
int method1(/*some parameters*/) const //this is a const method
{
//do something
}
const int method2(/*some parameters*/) //this is NOT a const method
{
//do something
}
}
因此,必须将b
更改为普通指针,而不是const对象的指针。或将what()
用作const方法。