Форум программистов, компьютерный форум CyberForum.ru

Исключениями - C++

Восстановить пароль Регистрация
 
kowandser
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 50
23.11.2010, 02:51     Исключениями #1
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
//---------------------------------------------Common.cpp----------------------------------------------
#include "stdafx.h"
#include <cstring>
#include <cctype>
 
namespace Common
{
    bool isstralpha (const char s[]) 
    {
        int length = strlen(s);
        
        if (length != 0) {
                for (int i = 0; i < length; ++i)
                        if (!isalpha(s[i])) return false;
        
                return true;
        } else return false;
    }
}
 
 
//--------------------------------------------------Common.h------------------------------------------
#pragma once
 
namespace Common
{
    bool isstralpha (const char s[]); // только буквы или 0х00?
}
 
 
//--------------------------------------------Person_Name.cpp------------------------------------------
#include <cstring>  
#include "Person_Name.h" 
#include "Common.h"
 
Person::Name::Exception::Exception(int code, char msg[], const Person::Name *n): code(code), name(n)
    {
        strcpy_s(this->message, MAX_MSG, msg);
    }
 
Person::Person():name() 
    {
        Person_Number = 0;
    }
Person::Person(char Fn[], char Ln[], char Pn[], int Person_Number):name(Fn, Ln, Pn)
    {
        this->Person_Number = Person_Number;
    }
Person::Person(const Person &obj):name(obj.name)
    {
        this->Person_Number = obj.Person_Number;
    }
Person::Person(const Name * n, int Person_Number): name(*n)
    {
        this->Person_Number = Person_Number;
    }
 
Person::Name::Name() {}
Person::Name::Name(char Fn[], char Ln[], char Pn[])
    {
        setFirstName(Fn);
        setLastName(Ln);
        setPatrName(Pn);
    }
Person::Name::Name(const Name &name)
    {
        this->setFirstName(name.FirstName);
        this->setLastName(name.LastName);
        this->setPatrName(name.PatrName);
    }
 
int Person::getN() {return Person_Number;} 
char * Person::Name::getFirstName () {return FirstName;}
char * Person::Name::getLastName () {return LastName;}
char * Person::Name::getPatrName () {return PatrName;}
 
void Person::Name::setFirstName (const char s[SIZE_FIRSTNAME]) 
{
    if(!Common::isstralpha(s))
        throw Exception (Name::Exception::ERROR_FIRST, MSG_ERROR_NAME_FIRST, this);
    else strcpy_s(FirstName, sizeof(FirstName), s);
}
 
void Person::Name::setLastName (const char s[SIZE_LASTNAME]) 
{
    if(!Common::isstralpha(s))
        throw Exception (Name::Exception::ERROR_LAST, MSG_ERROR_NAME_LAST, this);
    else strcpy_s(LastName, sizeof(LastName), s);
}
 
void Person::Name::setPatrName (const char s[SIZE_PATRNAME]) 
{
    if(!Common::isstralpha(s))
        throw Exception (Name::Exception::ERROR_PATR, MSG_ERROR_NAME_PATR, this);
    else strcpy_s(PatrName, sizeof(PatrName), s);
}
 
 
//------------------------------------------------Person_Name.h---------------------------------------
#define PERSON_ERROR_NAME     100       //Серия кодов исключений
#define MSG_ERROR_NAME_FIRST  "Имя"
#define MSG_ERROR_NAME_LAST   "Фамилия"
#define MSG_ERROR_NAME_PATR   "Отчество"
 
class Person
{
private:
    int Person_Number;
public: //Вложенный класс
class Name
    {
    public:
 
        class Exception
        {
        public:
            const static int ERROR_FIRST = PERSON_ERROR_NAME + 1;
            const static int ERROR_LAST = PERSON_ERROR_NAME + 2;
            const static int ERROR_PATR = PERSON_ERROR_NAME + 3;
            const static int MAX_MSG = 100;
            int code;
            char message[MAX_MSG];
            const Name * name;
            Exception () {code = 0; message[0] = 0x00;};
            Exception (int code,           //Код ошибки
                       char msg [MAX_MSG], //Сообщение
                       const Name * n);    //Объект с ошибкой
        };
 
        const static int SIZE_FIRSTNAME = 50;
        const static int SIZE_LASTNAME = 50;
        const static int SIZE_PATRNAME = 50;
    private:
        char FirstName[SIZE_FIRSTNAME];
        char LastName[SIZE_LASTNAME];
        char PatrName[SIZE_PATRNAME];
    public:
        Name();
        Name(char Fn[], char Ln[], char Pn[]);
        Name(const Name &name);
        //Функции записи (сеттеры)
        void setFirstName (const char s[SIZE_FIRSTNAME]);
        void setLastName (const char s[SIZE_LASTNAME]);
        void setPatrName (const char s[SIZE_PATRNAME]);
        //Функции чтения (геттеры)
        char * getFirstName ();
        char * getLastName ();
        char * getPatrName ();
    } name;   //-------------------------------------Открытый атрибут
    Person();
    Person(char Fn[], char Sn[], char Pn[], int Person_Number);
    Person(const Person &obj);
    Person(const Name * n, int Person_Number);
    //Возвращает номер персоны
    int getN(); 
};
 
 
//------------------------------------------------------my.cpp-----------------------------------------
#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include "Person_Name.h"
 
int _tmain(int argc, _TCHAR* argv[])
{
    try
    {
        Person p1();
        Person p2("Andrey", "Kovaliou", "Sergeevich", 1);
        Person p3(p2);
        Person p4(new Person::Name("Andrey", "Kovaliou", "Sergeevich"), 1);
    }
    catch (Person::Name::Exception e)
    {std::cout << "Name" << e.code << ":" << e.message << std::endl;}
 
    printf("Person_Number :%d: %s %s", p4.getN(), p4.name.getLastName(), p4.name.getFirstName());
    getch();
    return 0;
}


Если убрать исключение, то всё идеально работает.
Если оставить то компилятор:

1>Compiling...
1>my2.cpp
1>d:\cpp\my2\my2\my2.cpp(18) : error C2065: 'p4' : undeclared identifier
1>d:\cpp\my2\my2\my2.cpp(18) : error C2228: left of '.getN' must have class/struct/union
1> type is ''unknown-type''
1>d:\cpp\my2\my2\my2.cpp(18) : error C2065: 'p4' : undeclared identifier
1>d:\cpp\my2\my2\my2.cpp(18) : error C2228: left of '.name' must have class/struct/union
1> type is ''unknown-type''
1>d:\cpp\my2\my2\my2.cpp(18) : error C2228: left of '.getLastName' must have class/struct/union
1>d:\cpp\my2\my2\my2.cpp(18) : error C2065: 'p4' : undeclared identifier
1>d:\cpp\my2\my2\my2.cpp(18) : error C2228: left of '.name' must have class/struct/union
1> type is ''unknown-type''
1>d:\cpp\my2\my2\my2.cpp(18) : error C2228: left of '.getFirstName' must have class/struct/union
1>Build log was saved at "file://d:\CPP\my2\my2\Debug\BuildLog.htm"
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2010, 02:51     Исключениями
Посмотрите здесь:

C++ Разобраться с исключениями
Как бороться с необработанными исключениями C++
Работа с исключениями Java
Java SE Разъясните ситуацию с исключениями
Delphi Отладка программы с исключениями
Что общего между исключениями процессора и исключениями С++? C++
C# Работа с исключениями
PHP Рандом с исключениями из файла

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 09:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru