2013-11-19 2 views
0

Я пытаюсь изменить сообщение для bad_alloc.Override bad_alloc Exception

#include <iostream> 
#include <iomanip> 
#include <stdexcept> 

using std::logic_error; 
using std::bad_alloc; 


class OutOfRange : public logic_error { 
    public: 
     OutOfRange(): logic_error("Bad pointer") {} 
}; 


class OutOfMem : public bad_alloc { 
    public: 
     OutOfMem(): bad_alloc("not enough memory") {} 
}; 

OutOfRange() работает отлично, но OutOfMem посылает мне ошибку:

No matching function for call to std::bad_alloc::bad_alloc(const char[21])

ответ

2

ошибка компиляции говорит вам, что bad_alloc конструктор не принимает символ *. , например. See here
Вместо этого обратите внимание, что исключение what метод является vritual и использовать это вместо этого.

class OutOfMem : public bad_alloc { 
     public: 
     OutOfMem() {} 
     const char *what() const { 
      return "not enough memory"; 
     } 
    }; 

Edit: обратите внимание, возможно, придется констатировать, что не бросает следующим образом:

//... as before 
virtual const char * what() const throw() { 
    return "not enough memory"; 
} 
// as before ... 
+0

Я стараюсь, что это отправить мне об ошибке рыхлую перекидной спецификатор для 'виртуальной сопзЬ полукокса * OutOfMem :: what() const ' – KarlaE

+0

Как определяется 'what' в std :: exception в вашей настройке? У этого есть спецификатор броска? – doctorlove

+0

хорошо я только это на мой заголовок #include #include #include с использованием зЬй :: logic_error; с использованием std :: bad_alloc; – KarlaE

Смежные вопросы