Вызов функции «без константного указателя на константный» - PullRequest
0 голосов
/ 02 октября 2018

Я должен бросить указатель, как это.И я хочу вызвать функцию 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 (), я получаю сообщение об ошибке объект имеет спецификаторы типа, которые не совместимы с функцией-членом"База :: что"
Можете ли вы показать мне решение ?.Спасибо.

1 Ответ

0 голосов
/ 02 октября 2018

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...