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

try-catch

10.01.2010, 15:45. Показов 1870. Ответов 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
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru