Официальный сайт студ.городка НГТУ
Программирование и БД » Как отловить эту ошибку с++ .net? 

#1  15.05.08 22:23

nnn
Профиль

Как отловить эту ошибку с++ .net?

Если в textBox1 ввести буквы или ничего не вводить то происходит ошибка...пытаюсь отловить её вот так:

Код::

				try
				{
					max = Convert::ToUInt64(textBox1->Text);
				}
				catch()//Что написать в скобочках???
				{
					MessageBox::Show("Вы ввели что угодно...только не число...повторите ввод..." ,"Ошибка");
				}

Offline

#2  15.05.08 22:36

Re: Как отловить эту ошибку с++ .net?

catch(Exception)
если тебе неважно какой эксепшен

Offline

#3  15.05.08 22:46

nnn
Профиль

Re: Как отловить эту ошибку с++ .net?

Sunrise, ругается вот так...

Error    2    error C2316: 'System::Exception' : cannot be caught as the destructor and/or copy constructor are inaccessible    d:\разное\сорцы\числа мерсенна\числа мерсенна\Form1.h    115
Error    1    error C2725: 'System::Exception' : unable to throw or catch a managed object by value or reference    d:\разное\сорцы\числа мерсенна\числа мерсенна\Form1.h    115


ЗЫ до этого ошибок не было...

Offline

#4  15.05.08 23:35

Re: Как отловить эту ошибку с++ .net?

Код: c#:

//вариант 1
try
{
int i = Convert.ToInt32(Text1.Text);
}
catch(FormatException e)
{
//код для обработки ошибки
 MessageBox.Show("Ошибка", "Информация", MessageBoxButtons.OK);
}
finally 
{
}
 
//вариант 2 использовать RegEx для проверки
if (IsDigitString(Text1.Text))
{
  int i = Convert.ToInt32(Text1.Text);
}
 
private bool IsDigitString(string text)
{
            return System.Text.RegularExpressions.Regex.IsMatch(text, "[0-9]*"); 
 
 
}

Исправлено drug_detei (15.05.08 23:49)

Offline

#5  15.05.08 23:44

Re: Как отловить эту ошибку с++ .net?

еще пример нашел

Код: c#:

protected void CmdConvert1(object sender, EventArgs e)
    {
        //set the default value
        uint uiDecimal = 0; 
 
        try
        {
            // Convert text string to integer
            uiDecimal = Convert.ToUInt32(TxtText1.Text);
        } 
 
        catch (OverflowException exception)
        {
            // Show overflow message and return
            TxtHex1.Text = "Overflow";
            return;
        } 
 
        // Format hex value and show in another textbox
        TxtHex1.Text = String.Format("{0:x2}", uiDecimal);
    }
 
    protected void CmdConvert2(object sender, EventArgs e)
    {
        uint uiHex = 0; 
 
        try
        {
            // Convert hex value to int
            uiHex = Convert.ToUInt32(TxtHex2.Text, 16);
        } 
 
        catch (OverflowException exception)
        {
            // Show overflow message and return
            TxtText2.Text = "Overflow";
            return;
        } 
 
        // Format it and show as a string
        TxtText2.Text = uiHex.ToString();
    }

Offline

#6  15.05.08 23:49

Re: Как отловить эту ошибку с++ .net?

либо скобочки после  catch не ставь - он будет отлавливать ошибки всех типов, либо ставь
catch(System::Exception^ Ex)
{
...
}

это тоже самое, что вообще без скобок.
а вообще, нужно отлавливать исключения тех типов, что возвращает метод Convert. Это если грамотно. А ваще, сойдет и без скобок )))

P.S. я не уверен насчет нуженг ли крыжык, ибо Манагед ЦэПэПэ - малое извращение. Используйте Си Шарп.

Исправлено Andron_ (15.05.08 23:51)

Offline

#7  16.05.08 00:11

Re: Как отловить эту ошибку с++ .net?

кстати... насчет без скобок я имел ввиду СиШарп ))) за манагед ЦэПэПэ не ручаюсь )

Offline

#8  16.05.08 09:57

Re: Как отловить эту ошибку с++ .net?

а блин, тож подумал, что на C# надо
не очень понятно смысл c++.net, уж если хочется манагед, так тока C#

Offline

#9  16.05.08 13:59

Re: Как отловить эту ошибку с++ .net?

А тупо ифом побороть никак?
Чтобы не было ексцепшена, вроде как получится грамотное програмимрование.

Offline

#10  16.05.08 17:36

Re: Как отловить эту ошибку с++ .net?

отказ от catch даалеко не всегда является грамотным программированием.
да и вообще, мне очень интересно, как ты собрался бороться с исключениями ифами. Парсер свой писать чтоли?

Offline

#11  16.05.08 18:16

Re: Как отловить эту ошибку с++ .net?

Andron_, а если так?

Код: csharp:

   UInt64 parseResult;
   if(!UInt64.TryParse(textBox1.Text, out parseResult))
   {
       MessageBox.Show("error text") ;
   }

Offline

#12  16.05.08 18:36

Re: Как отловить эту ошибку с++ .net?

Muxa, ну трайпарс, ага, могёт.
только логика запутанней будет с этой конструкцией. else какой-то городить надо...
плюс непонятно в общем случае что произошло... с исключениями можно узнать что произошло на самом деле.
Плюс, далеко не всегда нужно узнавать результат парсинга в той функции, что собственно его вызывает. А в этом случае с этими ифами и булевыми возвращаемыми значениями можно ууух как задолбаться.

т.е. далеко не всегда логика описывается как

Код::

void OurF()
{
     //парсим, что-то еще делаем, ветвимся
}

может быть так:

Код::

void GreatF()
{
    //бла-бла-бла
    //MegaParse();
    //и вот тут то при успешно парсинге нужно что-то делать
    //с ифами вам нужно получить результат из ТрайПарс, вам его нужно получить, а потом еще      
    //раз передать.
}

вопрос целесообразности исключений для автора, естессна, открыт.

Offline

#13  16.05.08 20:41

Re: Как отловить эту ошибку с++ .net?

Andron_, дело, конечно, случая и ситуации, но в общем TryParse наиболее предпочтительный вариант, т.к. элементарно жрет меньше памяти, занимает меньше строк кода и не кидает исключение

Offline

#14  16.05.08 21:09

Re: Как отловить эту ошибку с++ .net?

ооо дааа... "занимает меньше строк кода" - несомненно, самое важно в выборе конструкции!

Offline

#15  16.05.08 21:11

Re: Как отловить эту ошибку с++ .net?

про "не кидает исключения" - я хочу напомнить, что исключения в .NET отнюдь не механизм для критических случаев. Исключения в .NET широко используются как штатных инструмент в работе приложения. И "выбросилось исключение" отнюдь не означает, что в работе приложения произошел сбой.

Offline

#16  16.05.08 21:39

Re: Как отловить эту ошибку с++ .net?

Andron_, есть такая замечательная книжка "Совершенный код". Автор Макконнелл. Очень советую почитать, сейчас лень цитировать

Offline

#17  16.05.08 22:02

Re: Как отловить эту ошибку с++ .net?

Muxa, ну уж будь добр, процитируй.
ибо есть такая ооочень замечательная книга Толстой "Война и Мир" - категорически советую прочитать.

Offline

#18  17.05.08 19:58

Re: Как отловить эту ошибку с++ .net?

Andron_, зря ты так, книга действительно хорошая.

Offline

#19  17.05.08 22:39

Re: Как отловить эту ошибку с++ .net?

AntiGen, да я не спорю ))
я уже ее скачал, прочитал что касается исключений и сделал вывод, что я ней не согласен )))
чем вести беседу в стиле "лень цитировать" - лучше вообще ее не веди.

Offline

#20  20.05.08 23:16

nnn
Профиль

Re: Как отловить эту ошибку с++ .net?

всем спасибо советы очень помогли...

Offline

#21  22.05.08 23:42

Re: Как отловить эту ошибку с++ .net?

Andron_ написал(а):

отказ от catch даалеко не всегда является грамотным программированием.
да и вообще, мне очень интересно, как ты собрался бороться с исключениями ифами. Парсер свой писать чтоли?

ошибка озвучена, проблем избежать её не вижу.
исключения надо ловить там где ты не знаешь, что они могут быть наверняка, заведомые ошибки лучше исправить алгоритмически.

Offline

#22  23.05.08 10:29

Maq
Профиль

Re: Как отловить эту ошибку с++ .net?

otaku, +1
полностью согласен

Offline

Программирование и БД » Как отловить эту ошибку с++ .net? 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.096 сек.
Выполнено 11 запросов.