Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.08.2010, 02:34   #1
mike_tihomirov
Пользователь
 
Регистрация: 15.02.2010
Сообщений: 58
По умолчанию Исключения что не так.

Люди, что не так вроде все по Страуструпу делаю.
Почему при повторном пробросе ошибка.

Код:
class Error
{
public:
	Error(){}
	Error(int n){s = n;}
	~Error(){};
public:
	int s;
};
void main()
{ 
	int m = 7;
	try
	{
		if(m == 7) throw Error(m);
		if(m == 5) throw Error(m);
	}
	catch(Error er)
	{
		cout << "m = " << er.s << endl;
		m = 3;//типа исправляю ошибочную ситуацию
		throw;
	}
	cout << "m = " << m << endl;
}
Не бывает глупых вопросов.
Глупец тот, кто не спрашивает.
mike_tihomirov вне форума Ответить с цитированием
Старый 17.08.2010, 08:15   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Что-то я тебя не очень понял...
Предлагаю слегка переписать, может так понятнее станет:
Код:
#include <iostream>
using namespace std;
class Error
{
public:
	Error(){}
	Error(int n){	s = n;	}
	~Error(){};
public:
	int s;
};


int _tmain(int argc, _TCHAR* argv[])
{
	int m = 7;
	try
	{
		// Это условие приведет к обработке ошибки
		if(m == 7) throw Error(m);
		// Это не приведет к обработке ошибке более того оно вообще не отработает.
		// Поскольку предидущее условие вызовет исключение и далее не пойдет
		if(m == 5) throw Error(m);
	}
	catch(Error er)
	{
		// m==7 сработает и выдаст сообщение о том что нужна поправка
		cout << "m must be corrected " << er.s << endl;
		m = 3;//типа исправляю ошибочную ситуацию
	}
	cout << "m = " << m << endl;

	getchar();
	return 0;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.08.2010, 08:46   #3
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Цитата:
Сообщение от mike_tihomirov Посмотреть сообщение
Код:
	catch(Error er)
	{
		cout << "m = " << er.s << endl;
		m = 3;//типа исправляю ошибочную ситуацию
		throw;
	}
Ты словил исключение, обработал и кинул дальше : throw;
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 17.08.2010, 11:02   #4
mike_tihomirov
Пользователь
 
Регистрация: 15.02.2010
Сообщений: 58
По умолчанию

Оно то да, только я ничтоже сумняшеся думал что throw;
вернет меня в try{} обратно, и там м != 7 и 5 и все cout << m;
Не бывает глупых вопросов.
Глупец тот, кто не спрашивает.
mike_tihomirov вне форума Ответить с цитированием
Старый 17.08.2010, 11:25   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,723
По умолчанию

Цитата:
думал что throw;
вернет меня в try{} обратно,
С какого перепугу??? Вы сначала говорите: попробуй выполни, потом ОШИБКА, дай я попробую с ней разобраться, НЕ смог.... так почему проц должен возвращаться и выполнять ваш код дальше?
p51x вне форума Ответить с цитированием
Старый 17.08.2010, 12:41   #6
mike_tihomirov
Пользователь
 
Регистрация: 15.02.2010
Сообщений: 58
По умолчанию

В общем всем спасибо за участие. А я про раскрутку стека повнимательней почитаю.
Не бывает глупых вопросов.
Глупец тот, кто не спрашивает.
mike_tihomirov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
А что не так??? frargus Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 21.03.2010 08:05
Что не так? rododendron Общие вопросы C/C++ 5 05.05.2009 22:48
Что не так? Alexcomeback Общие вопросы C/C++ 9 07.04.2009 23:14
Что не так? Viento Microsoft Office Excel 3 30.01.2009 14:38
Что-то не так Radiofuck Помощь студентам 2 16.01.2007 22:06