“无常量指针指向常量”调用功能

时间:2018-10-02 02:22:02

标签: c++ c pointers exception

我必须像这样抛出一个指针。我想在主类中调用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”不兼容的类型限定符
你能告诉我一个解决方案吗? 谢谢。

1 个答案:

答案 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方法。