• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ - jak dziedziczyć po std::runtime_error

+1 głos
504 wizyt
pytanie zadane 23 września 2020 w C i C++ przez aram100 Użytkownik (500 p.)

Hej

Jak napisać własny wyjątek dziedziczący po std::runtime_error, tak aby móc go później rzucić tak:

throw MyRuntimeException("Moja wiadomosc wyjatku")

W sensie aby można go było rzucać z różnymi wiadomościami

Narazie mam taki kod, jak go dokończyć? Próbowałem dodać zwykł,y publiczny konstruktor (z wiadomością typu std::string), ale nie działa

 

class MyRuntimeException : public std::runtime_error
{
    std::string exceptionMessage;
 
public:
    const char* what() const noexcept override {
        return exceptionMessage.c_str();
    }
};

 

1 odpowiedź

+3 głosów
odpowiedź 23 września 2020 przez tangarr Mędrzec (155,140 p.)

Klasa std::runtime_error nie posiada konstruktora domyślnego. Podejrzewam, że nie zainicjowałeś go prawidłowo ze swojego konstruktora.
 

class MyRuntimeException : public std::runtime_error
{
    std::string exceptionMessage;
  
public:
    MyRuntimeException(const std::string &message) : 
        std::runtime_error(""),
        exceptionMessage(message)
    {
    }
    const char* what() const noexcept override {
        return exceptionMessage.c_str();
    }
};

 

Podobne pytania

+1 głos
1 odpowiedź 575 wizyt
pytanie zadane 20 lutego 2016 w C i C++ przez JAKUBW Nałogowiec (33,470 p.)
+1 głos
0 odpowiedzi 368 wizyt
pytanie zadane 21 marca 2023 w C# przez Pawel1995 Gaduła (3,810 p.)
0 głosów
0 odpowiedzi 800 wizyt

93,755 zapytań

142,715 odpowiedzi

323,363 komentarzy

63,350 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...