Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
39 / 39 / 1
Регистрация: 13.09.2009
Сообщений: 108

try-catch

10.01.2010, 15:45. Показов 1862. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Читаю книгу Страуструпа. Он пишет (стр 232), что можно не передавать обработчику исключений какое либо значение.
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 "stdafx.h"
#include <iostream>
using namespace std;
 
 
struct Is_Not_Right_Integer {};
 
int foo(int number)
{
    if (number == 0)
        throw Is_Not_Right_Integer;
    return 0;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    try
    {
        foo(0);
    }
    catch (Is_Not_Right_Integer)
    {
        cout << "Exeption: Is_Not_Right_Integer" << endl;
    }
    return 0;
}
Мне Visual Studio пишет:
error C2275: 'Is_Not_Right_Integer' : illegal use of this type as an expression
Как только добавляю конструктор - все пашет.
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 "stdafx.h"
#include <iostream>
using namespace std;
 
 
struct Is_Not_Right_Integer {Is_Not_Right_Integer(){}};
 
int foo(int number)
{
    if (number == 0)
        throw Is_Not_Right_Integer();
    return 0;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    try
    {
        foo(0);
    }
    catch (Is_Not_Right_Integer)
    {
        cout << "Exeption: Is_Not_Right_Integer" << endl;
    }
    return 0;
}
Что не так в первом коде?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.01.2010, 15:45
Ответы с готовыми решениями:

Try-catch
Добрый вечер, #include &lt;iostream&gt; using namespace std; void F1(int); void F2(int, int); void F3(int, int, int);

TRY/CATCH
Здравствуйте! У меня есть: MASS; для простоты пояснения, x=rand();y=rand(),znacheniye=rand(); Как игнорировать ошибки...

Try и catch
Пытался сделать простую структуру,чтобы в блоке try задавалось значение переменной x, и если это значение равно,например, 5,то блок catch...

10
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
10.01.2010, 16:24
Конструктор можно было не добавлять. throw требует значение, а ты ему подсовывал тип, вот он и ругался. Убери свой конструктор, но оставь throw Is_Not_Right_Integer(); со скобками.
Ну и реплика в сторону: "правое целое" - это нечто новое в математике и программировании... Для обозначения правильности лучше использовать слово Valid.
1
39 / 39 / 1
Регистрация: 13.09.2009
Сообщений: 108
10.01.2010, 17:03  [ТС]
Вы гений. Спс. Я как то не подумал об этом. Кстати, а не подскажете, зачем ставить скобки, ведь у этой структуры не контруктора.
Ну и реплика в сторону: "правое целое" - это нечто новое в математике и программировании... Для обозначения правильности лучше использовать слово Valid.
Согласен.
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
10.01.2010, 17:50
У этой структуры всё равно есть конструктор. Только он создаётся компилятором по умолчанию (ну и в данном случае совпадает с тем, что был прописан явно во втором варианте, то есть ничего не делает). Вообще есть "зловещая четвёрка" функций, которые, если их не упомянуть явно, создаются автоматически, о чём надо помнить во избежание всяких сюрпризов. Это конструктор по умолчанию (т.е. без параметров), конструктор копирования, присвоение и деструктор.
1
39 / 39 / 1
Регистрация: 13.09.2009
Сообщений: 108
10.01.2010, 17:59  [ТС]
Цитата Сообщение от Nick Alte Посмотреть сообщение
конструктор копирования, присвоение
А в чем отличие?
Вот к примеру,
C++
1
2
MyClass a1(1,2,3);
MyClass a2 = a1; // Это копирование или присвоение. Мне так кажется, что присвоение. А копирование как?
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
10.01.2010, 18:56
Конструктор копирования вызывается при создании объекта. В вышеприведённом примере вызывается именно он. Как и в
C++
1
MyClass a2(a1);
Оператор присвоения вызывается, когда мы изменяем значение уже существующего объекта.
C++
1
2
MyClass a2;
a2 = a1;   // А вот тут уже присвоение
1
39 / 39 / 1
Регистрация: 13.09.2009
Сообщений: 108
10.01.2010, 19:04  [ТС]
А что бы не было таких неявных конструкторов, надо объявлять их как explicit?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.01.2010, 19:15
Цитата Сообщение от Nick Alte Посмотреть сообщение
Конструктор копирования вызывается при создании объекта
При передаче объекта в качестве параметра функции по значению или при возврате по значению так же неявно создаётся объект-копия
1
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
10.01.2010, 19:23
Неявный конструктор по умолчанию не создаётся, если явно описан хотя бы один любой конструктор. Остальные вещи можно либо написать самому, либо объявить самому, но не реализовывать. Разумеется, во втором случае их лучше помещать в private.
Что же до передачи в качестве параметра по значению, это такое же полноправное создание локального автоматического объекта, как и объявление обычной переменной. Ведь аргументы отличаются от автоматических локальных переменных только тем, что их начальные значения задаются в месте вызова.
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.01.2010, 19:32
Цитата Сообщение от Nick Alte Посмотреть сообщение
это такое же полноправное создание локального автоматического объекта, как и объявление обычной переменной
Более чем уверен, что для автора темы такие тонкости совсем не очевидны
1
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
10.01.2010, 19:35
Ну вот, были неочевидны, теперь стали очевидны.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.01.2010, 19:35
Помогаю со студенческими работами здесь

try-catch
Доброго времени суток, начал изучать исключения, и вот есть такой код: // new.cpp : Defines the entry point for the console...

try . catch
можно ли провести данную операцию для функции erase у вектора??? пытался, что-то не получилось: #include &lt;vector&gt; #include...

Try catch
Доброго времени суток нехочу наследовать диалог,тем более что набросал его за минуту в дизайнере,необходимо после DIalog-&gt;close();...

try catch
Здравствуйте. В c++ новичёк, с try catch никогда толком не работал, а тут пришлось. Нужно сделать защиту от ввода всего кроме цифр. вот...

try-catch
Какой тип проекта создавать в Visual Studio чтобы можно было сделать обработку исключений с try-catch? Или что сделать в Code Blocks с той...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru