Аватар для MrAndrey_ka
79 / 79 / 20
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1

создание и обработка исключений

16.06.2009, 15:27. Показов 6828. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
подскажите как реализовать свой класс исключений, а затем создать исключение этого типа?
есть код
C++
1
2
3
4
5
6
7
8
9
10
11
class EError: public Exception{}; \\мой класс исключений
 
 
class Myclass \\еще какой нибудь класс
{Myclass;
........
 
Myclass::Myclass
{
if(....)
 throw new EFileError("Файл не открыт!");}
на последнюю строчку кампилятор ругается:
Compiler could not generate default constructor for class 'EFileError'

что не так?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.06.2009, 15:27
Ответы с готовыми решениями:

Обработка исключений
Добрый вечер, возникла такая проблема: пытаюсь поймать обработчиком исключений ошибку при открытии файла и помещении его в Memo, но ошибка...

Обработка исключений
Как можно получить номер строки, вызвавшей исключение? К примеру выполняется ряд однотипных действий, которые могут потенциально вызвать...

Обработка исключений
Здравствуйте! Возможно, мой вопрос совсем глупый. Но как сделать так, чтобы обработка исключений проводилась так, как написала это я с...

15
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
16.06.2009, 16:12
А это нормально, когда класс называется EError, а юзаешь EFileError?
0
 Аватар для MrAndrey_ka
79 / 79 / 20
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1
22.06.2009, 14:12  [ТС]
ой сори опечатка правильно так:
throw new EError("Файл не открыт!");

хотя не работает ни так ни так!

ну что, неужели никто не может помочь?
0
Почетный модератор
 Аватар для Lord_Voodoo
8784 / 2537 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
24.06.2009, 13:12
а как ты используешь этот класс в коде? что значит не работает?
0
 Аватар для MrAndrey_ka
79 / 79 / 20
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1
24.06.2009, 13:20  [ТС]
Цитата Сообщение от VoodooMan Посмотреть сообщение
а как ты используешь этот класс в коде? что значит не работает?
C++
1
2
3
file=fopen("Cosm.dat","rt");
if(file==NULL)
 throw new EError("Файл не открыт!");
вот так использую, а не работает - значит компилятор такое не пропускает, пишет
Compiler could not generate default constructor for class 'EError'
0
инженер-системотехник
 Аватар для Haster
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
24.06.2009, 13:25
Так ты это самое исключение отлавливаешь в catch? Приведи полный код..
0
 Аватар для MrAndrey_ka
79 / 79 / 20
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1
24.06.2009, 13:30  [ТС]
вот полный код, до catch я еще не добрался, я его даже создать не могу, так что пока о обработке речь не идет
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include"stdio.h"
#include "File.h"
    
//---------------------------------------------------------------------------
 
#pragma package(smart_init)
 
 
class EFileError: public Exception{};
 
 
class TxtFile
 
{ 
public:
   TxtFile(char* FName, char *mode, int buffer=256);
   ~TxtFile(void);
   void ChangeMode(char *mode);
   void ChangeFile(char* FName, char *mode);
   __property  Boolean OpenFile = {read=openfile};
   __property char* Str={read=GetString, write=SetString};
 
private:
 //  EFileError error;
   char *buf;
   int len;
   char* name;
   char *mod;
   bool openfile,endfile;
   FILE *file;
   char* GetString();
   void SetString(char* Value);
 
};
 
TxtFile::TxtFile(char* FName, char *mode, int buffer)
{
openfile=false;
endfile=false;
ChangeFile(FName,mode);
if(buffer<=0)
  len=-1;
len=buffer;
buf = new char(len);}
 
TxtFile::~TxtFile(void)
{if(openfile)  fclose(file);
delete buf;}
 
void TxtFile::ChangeFile(char* FName, char *mode)
{name = new char(StrLen(FName)+1);
StrCopy(name,FName);
ChangeMode(mode);}
 
void TxtFile::ChangeMode(char *mode)
{if(mode == mod)return;
mod = new char(StrLen(mode)+1);
StrCopy(mod,mode);
if(openfile)  fclose(file);
openfile=((file=fopen(name,mod))!= NULL); }
 
char* TxtFile::GetString()
{
fscanf(file,"%s", buf);
endfile=feof(file);
return buf;}
 
void TxtFile::SetString(char* Value)
{
[B]if(!openfile)throw new EFileError("Файл не открыт!");[/B]
 
 
}
0
Почетный модератор
 Аватар для Lord_Voodoo
8784 / 2537 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
24.06.2009, 14:48
ну я тут немного поколдовал, вот такой код работает:
C++
1
2
3
4
5
6
class EMyError: public Exception {
   public:
   __fastcall EMyError(const AnsiString Msg) : Exception(Msg){
     throw new Exception(Msg);
   };
};
0
Программист TH
 Аватар для DanUnited
292 / 147 / 12
Регистрация: 06.01.2009
Сообщений: 537
24.06.2009, 21:13
А вы пробовали через try и catch??
0
Почетный модератор
 Аватар для Lord_Voodoo
8784 / 2537 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
25.06.2009, 09:19
я не силен в теории, но, по-моему, конструктор классу неплохо бы и объявите
0
 Аватар для MrAndrey_ka
79 / 79 / 20
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1
29.06.2009, 10:24  [ТС]
Цитата Сообщение от DanUnited Посмотреть сообщение
А вы пробовали через try и catch??
помоему через try и catch происходит обработка исключений, а не создание!!!
0
Почетный модератор
 Аватар для Lord_Voodoo
8784 / 2537 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
29.06.2009, 10:28
MrAndrey_ka, а мой вариант тоже не работает? я проверил, ошибки нет, исключение генерится нужное
0
 Аватар для MrAndrey_ka
79 / 79 / 20
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1
29.06.2009, 10:51  [ТС]
Цитата Сообщение от VoodooMan Посмотреть сообщение
ну я тут немного поколдовал, вот такой код работает:
C++
1
2
3
4
5
6
class EMyError: public Exception {
   public:
   __fastcall EMyError(const AnsiString Msg) : Exception(Msg){
     throw new Exception(Msg);
   };
};
так не ругается кампилятор, можна даже сказать работает, но после генерации исключения выдает ошибку:
Изображения
 
0
инженер-системотехник
 Аватар для Haster
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
29.06.2009, 11:10
Так потому и выдает ошибку, что оно у тебя не обрабатывается
0
 Аватар для MrAndrey_ka
79 / 79 / 20
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1
29.06.2009, 11:31  [ТС]
Цитата Сообщение от Haster Посмотреть сообщение
Так потому и выдает ошибку, что оно у тебя не обрабатывается
даже при обработке выскакивает!!!
да и вообще то сообщение при генерации данного исключения была бы другая!
0
Почетный модератор
 Аватар для Lord_Voodoo
8784 / 2537 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
29.06.2009, 11:36
а как вызываешь исключение?

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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
class EMyError: public Exception {
   public:
   __fastcall EMyError(const AnsiString Msg) : Exception(Msg){
 
   };
};
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  int i = 0;
  if(!i){
    throw EMyError("Нам конец хозяин, доигрались");
  }
}
//---------------------------------------------------------------------------
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.06.2009, 11:36
Помогаю со студенческими работами здесь

Debug и обработка исключений
Добрый день. Вопрос в следующем, генерирую сам исключение: try { throw(1); } catch (...) { ... }

Рассылка почты и обработка исключений
Всем привет, проблема такая: в потоке создаю TIdSMTP, TIdMessage, TIdSocksInfo, TIdSSLIOHandlerSocketOpenSSL. При работе программы...

Не пойму момент (обработка исключений)
Вот код: try { Application-&gt;Initialize(); Application-&gt;CreateForm(__classid(TForm1), &amp;Form1); Application-&gt;Run(); } ...

Обработка исключений типа std::exception
Пытаюсь выполнить участок кода: try { socket_=new Network::ClientSocket(Host,Port); } catch (std::exception *e) { ...

Обработка всех исключений TIdHTTP + немного ООП
Приветствую. У меня возникла потребность в обработке всех исключений компонента TIdHTTP для более детального отчёта работы программы. А...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

Новые блоги и статьи
Чем асинхронная логика (схемотехника) лучше тактируемой, как я думаю, что помимо энергоэффективности - ещё и безопасность.
Hrethgir 14.05.2025
Помимо огромного плюса в энергоэффективности, асинхронная логика - тотальный контроль над каждым совершённым тактом, а значит - безусловная безопасность, где безконтрольно не совершится ни одного. . .
Многопоточные приложения на C++
bytestream 14.05.2025
C++ всегда был языком, тесно работающим с железом, и потому особеннно эффективным для многопоточного программирования. Стандарт C++11 произвёл революцию, добавив в язык нативную поддержку потоков,. . .
Stack, Queue и Hashtable в C#
UnmanagedCoder 14.05.2025
Каждый опытный разработчик наверняка сталкивался с ситуацией, когда невинный на первый взгляд List<T> превращался в узкое горлышко всего приложения. Причина проста: универсальность – это прекрасно,. . .
Как использовать OAuth2 со Spring Security в Java
Javaican 14.05.2025
Протокол OAuth2 часто путают с механизмами аутентификации, хотя по сути это протокол авторизации. Представьте, что вместо передачи ключей от всего дома вашему другу, который пришёл полить цветы, вы. . .
Анализ текста на Python с NLTK и Spacy
AI_Generated 14.05.2025
NLTK, старожил в мире обработки естественного языка на Python, содержит богатейшую коллекцию алгоритмов и готовых моделей. Эта библиотека отлично подходит для образовательных целей и. . .
Реализация DI в PHP
Jason-Webb 13.05.2025
Когда я начинал писать свой первый крупный PHP-проект, моя архитектура напоминала запутаный клубок спагетти. Классы создавали другие классы внутри себя, зависимости жостко прописывались в коде, а о. . .
Обработка изображений в реальном времени на C# с OpenCV
stackOverflow 13.05.2025
Объединение библиотеки компьютерного зрения OpenCV с современным языком программирования C# создаёт симбиоз, который открывает доступ к впечатляющему набору возможностей. Ключевое преимущество этого. . .
POCO, ACE, Loki и другие продвинутые C++ библиотеки
NullReferenced 13.05.2025
В C++ разработки существует такое обилие библиотек, что порой кажется, будто ты заблудился в дремучем лесу. И среди этого многообразия POCO (Portable Components) – как маяк для тех, кто ищет. . .
Паттерны проектирования GoF на C#
UnmanagedCoder 13.05.2025
Вы наверняка сталкивались с ситуациями, когда код разрастается до неприличных размеров, а его поддержка становится настоящим испытанием. Именно в такие моменты на помощь приходят паттерны Gang of. . .
Создаем CLI приложение на Python с Prompt Toolkit
py-thonny 13.05.2025
Современные командные интерфейсы давно перестали быть черно-белыми текстовыми программами, которые многие помнят по старым операционным системам. CLI сегодня – это мощные, интуитивные и даже. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru