Obsługa wyjątku

Obsługa wyjątku
IT
  • Rejestracja:około 8 lat
  • Ostatnio:ponad 4 lata
  • Postów:26
0

Cześć, mam problem z obsługą tak wyrzuconego wyjątku. W jaki sposób mogę się odnieść w funkcji handle() do std::runtime_error?

Kopiuj
try {
    throw std::runtime_error("jakis blad");
  } catch(...) {
    UncheckedStausHandler::handle();
  } 
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:6 dni
  • Lokalizacja:Szczecin
0

Nie możesz, jeśli chcesz runtime_error to złap runtime_error:

Kopiuj
try {
    throw std::runtime_error("jakis blad");
  } catch(std::runtime_error const& e) {
    UncheckedStausHandler::handle(e.what());
  } 

edytowany 1x, ostatnio: kq
IT
  • Rejestracja:około 8 lat
  • Ostatnio:ponad 4 lata
  • Postów:26
0

To by było zbyt proste gdybym mógł zrobić tak jak mówisz. Mam takiego maina, którego nie mogę modyfikować i mam do niego dopisać klasę StatusCode i wszystko fajnie działa, oprócz tego że nie wiem jak otrzymać coś takiego "..Handling std::exception jakis blad" (ostatnia linia wyniku).

Kopiuj
#include <iostream>
#include "StatusCode.h"


using namespace std;
int main() {
  try {
    {
      StatusCode sc = StatusCode::ALLOK();  // wywolanie bezproblemowe
      if ( sc.isok() )
      cout << "ok " << endl;
      else
	cout << "not ok " << sc.info() << endl;
    }
    {
      StatusCode sc = StatusCode::ERROR("Blad");
      if ( sc.isok() )
	cout << "ok " << endl;
      else
	cout << "not ok " << sc.info() << endl;
    }
    {
      const StatusCode sc = StatusCode::ALLOK();
      StatusCode sc2  = sc; // tu sc2 przejmuje funkcje sprawdzenia czy byl sprawdzony
      sc2.isok();
      std::cout << "Kod bledu sprawdzony, nie ma wyjatku.\n";
    }
    {
      {
	StatusCode sc = StatusCode::ALLOK();
      }
      std::cout << "Nie sprawdzamy kodu bledu\n";
    }
  } catch (...) {
    UncheckedStausHandler::handle();
  }

  try {
    throw std::runtime_error("jakis blad");
  } catch(...) {
    UncheckedStausHandler::handle();
  }     
}
/* wynik
ok 
not ok Blad
Kod bledu sprawdzony, nie ma wyjatku.
..Handling UncheckedStatusCode 
..Handling std::exception jakis blad
 */
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:6 dni
  • Lokalizacja:Szczecin
0

UncheckedStatusHandler dostarczasz Ty, czy zadający zadanie? Jeśli Ty, to użyj std::current_exception, ale to jest działanie naokoło problemu :/


IT
  • Rejestracja:około 8 lat
  • Ostatnio:ponad 4 lata
  • Postów:26
0

UncheckedStatusHandler dostarczam ja, a masz może jeszcze jakiś inny pomysł zamiast tego std::current_exception , bo nie wolno nam używać c++11

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:6 dni
  • Lokalizacja:Szczecin
0

No to, jeśli kontrolujesz obie te klasy, pozostaje Ci chyba tylko jakaś flaga/zmienna globalna, którą być ustawiał i sprawdzał.


edytowany 1x, ostatnio: kq
satirev
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 4 lata
2
Kopiuj
void UncheckedStausHandler::handle() {
  try {
    throw;
  } catch ( const std::exception &e ) {
    std::cout << "...Handling std::exception " << e.what() << '\n';
  }
  catch ( const UncheckedStatusCode &e ) {
    std::cout << "...Handling UncheckedStatusCode" << e.what() << '\n';
  } 
  catch (...) {
    std::cout << "...\n";
  }
}
kq
Phew, ale brain fart.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.