Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
#1

Разобраться с исключениями - C++

01.06.2011, 18:35. Просмотров 393. Ответов 4
Метки нет (Все метки)

Накопилось пара вопросов по исключениям.
Собственно мой класс исключений производный от стандартного класса runtime_error, ничего особенного не делает, только для теста.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdexcept>
#include <string>
using namespace std;
 
class re1: public runtime_error
{
    public:
    re1(string a)
    :runtime_error(a)
    {
        cout<<"\nre1 is running";
    }
};
 
class re2: public runtime_error
{
    public:
    re2(string a)
    :runtime_error(a)
    {
        cout<<"\nre2 is running";
    }
};
Ну и дальше main и тут же вопрос, почему вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <stdexcept>
#include "re1.cpp"
using namespace std;
 
int main()
{
    cout<<"\nSTART";
    int a;
    cin>>a;
    try
    {
        cout<<"\nTRY BLOCK";
        if (a==0)
        {
            re1 a("RE1");
            throw a;
        }
        if (a==1)
        {
            re2 a("RE2");
            throw a;
        }
    }
    catch(runtime_error &x)
    {
        cout<<'\n'<<x.what()<<" is got";
    }
    return 0;
 
}
Мой catch(runtime_error &x) перехвачивает исключение re1 и re2.
А вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <stdexcept>
#include "re1.cpp"
using namespace std;
 
int main()
{
    cout<<"\nSTART";
    int a;
    cin>>a;
    try
    {
        cout<<"\nTRY BLOCK";
        if (a==0)
         re1 a("RE1");
        else
         re2 a("RE2");
        throw a;
    }
    catch(runtime_error &x)
    {
        cout<<'\n'<<x.what()<<" is got";
    }
    return 0;
 
}
Уже не перехвачивает?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2011, 18:35     Разобраться с исключениями
Посмотрите здесь:

Что общего между исключениями процессора и исключениями С++? - C++
Собственно, сабж. Можно ли поймать исключения, выброшенные процессором(например, деления на 0) или только это общее название разных...

работа с исключениями - C++
Столкнулся с #include &lt;exception&gt; и не могу понять как это работает, в интернете информации мало и не понятно, кто может обьяснить или...

Работа с исключениями - C++
Имеется вот такой код в конструкторе : try { this -&gt; array = new int * ; } catch (std::bad_alloc&amp;...

функции с исключениями в наследовании - C++
почему на такоеstruct B { class S {}; class SS :public S {}; virtual void f()throw(SS) { throw SS(); } }; struct C : public...

Перебор комбинаций с исключениями - C++
Здраствуйте!Хочу попробовать сделать задачу:есть число n которое указывает количество цифр и есть число k которое указывает количество...

Как бороться с необработанными исключениями - C++
Очень часто возникает в VS такая ошибка при выполнении программы: Необработанное исключение типа &quot;System.NullReferenceException&quot;...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dihlofos
Бродяга
303 / 257 / 17
Регистрация: 27.08.2010
Сообщений: 553
01.06.2011, 18:56     Разобраться с исключениями #2
Gepar, зачем у вас переменная типа int и объекты типа re1, re2 имеют одинаковые имена (a)? В первом случае, ладно, объекты вы создаёте внутри блока {}, а во втором случае происходит throw a (где a - та самая переменная int)
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
01.06.2011, 22:44  [ТС]     Разобраться с исключениями #3
dihlofos, ага, но тогда оно не находит что ему нужно выбрасывать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <stdexcept>
#include "re1.cpp"
using namespace std;
 
int main()
{
    cout<<"\nSTART";
    int z;
    cin>>z;
    try
    {
        cout<<"\nTRY BLOCK";
        if (z==0)
         re1 a("RE1");
        else
         re2 a("RE2");
        throw a;
    }
    catch(runtime_error &x)
    {
        cout<<'\n'<<x.what()<<" is got";
    }
    return 0;
 
}
Ну и вот такие хитрости тогда тоже не помогают
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <stdexcept>
#include "re1.cpp"
using namespace std;
 
int main()
{
    cout<<"\nSTART";
    int z;
    cin>>z;
    try
    {
        runtime_error *a;
        cout<<"\nTRY BLOCK";
        if (z==0)
          a= new re1("RE1");
        else
         a= new re2("RE2");
        throw a;
    }
    catch(runtime_error &x)
    {
        cout<<'\n'<<x.what()<<" is got";
    }
    return 0;
 
}
Добавлено через 2 часа 47 минут
В общем метод тыка показал что выбросить/вернуть с функции переменную созданную в условии if нельзя.
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
01.06.2011, 22:52     Разобраться с исключениями #4
потому что перехватывать надо указатель
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2011, 22:56     Разобраться с исключениями
Еще ссылки по теме:

Помогите разобраться - C++
У меня есть координаты North,West,East,South. Мне нужно отобразить их на осях ОХ и ОУ. Допустим я ввожу North 5 East 3 South 1 ...

разобраться с очередью - C++
не работает operator+ и оператор-- // ConsoleApplication85.cpp: определяет точку входа для консольного приложения. // #include...

If else помогите разобраться - C++
Доброго времени суток всем. Не так давно начали программировать в C++ MS Visual Studio 2010? и возникло у меня затруднение в работе с if ...

Разобраться с кодом - C++
Есть готовый код программы, решающей следующую задачу: Для двух прямолинейных кусков круглой трубы известны их внешние диаметры,...

Нужно разобраться - C++
Прошу помощи. Расскажите пожалуйста по пунктам где и что делает программа, что за функция.Заранее благодарен. #include &lt;stdio.h&gt; int...

Разобраться в коде - C++
Алгоритм сортирует элементы матрицы согласно схеме (см. изображение), в порядке убывания и методом пузырька. Происходит движение: 1) вниз...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
01.06.2011, 22:56  [ТС]     Разобраться с исключениями #5
Цитата Сообщение от OstapBender Посмотреть сообщение
потому что перехватывать надо указатель
А ведь и правда, вот так затупишь где-то и без подсказки не замечаешь.
Yandex
Объявления
01.06.2011, 22:56     Разобраться с исключениями
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru