Добрый день. Помогите пожалуйста найти ошибку в коде.
#include <string>
#include <iostream>
using namespace std;
using namespace System;
class Person
{
private:
string name;
string surname;
string patronymic;
int dayOfBirth;
int monthOfBirth;
int yearOfBirth;
public:
Person(const char*, const char*, const char*, int, int, int);
void setPerson(const char*, const char*, const char*);
void setName(const char*);
void setSurname(const char*);
void setPatronymic(const char*);
void setDayOfBirth(int);
void setMonthOfBirth(int);
void setYearOfBirth(int);
void setDateOfBirth(int, int, int);
string getName() { return this->name; }
string getSurname() { return this->surname; }
string getPatronimic() { return this->patronymic; }
int getDayOfBirth() { return this->dayOfBirth; }
int getMonthOfBirth() { return this->monthOfBirth; }
int getYearOfBirth() { return this->yearOfBirth; }
void printFullName() { cout << surname << " " << name << " " << patronymic << endl; }
void printDateOfBirth() { cout << dayOfBirth << "." << monthOfBirth << "." << yearOfBirth << endl; }
virtual ~Person() {};
private:
bool isValidAllName(const char*);
bool isValidPerson(const char*, const char*, const char*);
bool isValidDay(int);
bool isValidMonth(int);
bool isValidYear(int);
bool isValidDate(int, int, int);
};
Person::Person(const char* surname, const char* name, const char* patronymic, int day, int month, int year)
{
setPerson(surname, name, patronymic);
setDateOfBirth(day, month, year);
}
void Person::setName(const char* name)
{
bool isValid = isValidAllName(name);
try
{
if (isValid)
{
this->name = name;
}
else
{
throw isValid;
}
}
catch (bool valid)
{
cout << "Not valid name! " << name << endl;
}
}
void Person::setSurname(const char* surname)
{
bool isValid = isValidAllName(surname);
try
{
if (isValid)
{
this->surname = surname;
}
else
{
throw isValid;
}
}
catch (bool valid)
{
cout << "Not valid surname! " << surname << endl;
}
}
void Person::setPatronymic(const char* patronymic)
{
bool isValid = isValidAllName(patronymic);
try
{
if (isValid)
{
this->patronymic = patronymic;
}
else
{
throw isValid;
}
}
catch (bool valid)
{
cout << "Not valid Patronymic! " << patronymic << endl;
}
}
void Person::setPerson(const char* surname, const char* name, const char* patronymic)
{
bool isValid = isValidPerson(surname, name, patronymic);
try
{
if (isValid)
{
setSurname(surname);
setName(name);
setPatronymic(patronymic);
}
else
{
throw isValid;
}
}
catch (bool valid)
{
cout << "Not valid full name: " << surname << " " << name << " " << patronymic << endl;
}
}
void Person::setDateOfBirth(int day, int month, int year)
{
bool isValid = isValidDate(day, month, year);
try
{
if (isValid)
{
setDayOfBirth(day);
setMonthOfBirth(month);
setYearOfBirth(year);
}
else
{
throw isValid;
}
}
catch (bool valid)
{
cout << "Date is wrong: " << day << "/" << month << "/" << year << endl;
}
}
void Person::setDayOfBirth(int dayOfBirth)
{
bool isValid = isValidDay(dayOfBirth);
try
{
if (isValid)
{
this->dayOfBirth = dayOfBirth;
}
else
{
throw isValid;
}
}
catch (bool valid)
{
cout << "Value is not in range: " << dayOfBirth << endl;
}
}
void Person::setMonthOfBirth(int monthOfBirth)
{
bool isValid = isValidMonth(monthOfBirth);
try
{
if (isValid)
{
this->monthOfBirth = monthOfBirth;
}
else
{
throw isValid;
}
}
catch (bool valid)
{
cout << "Month is not in range: " << monthOfBirth << endl;
}
}
void Person::setYearOfBirth(int yearOfBirth)
{
bool isValid = isValidYear(yearOfBirth);
try
{
if (isValid)
{
this->yearOfBirth = yearOfBirth;
}
else
{
throw isValid;
}
}
catch (bool valid)
{
cout << "Year is not in range: " << yearOfBirth << endl;
}
}
bool Person::isValidPerson(const char* surname, const char* name, const char* patronymic)
{
return isValidAllName(surname) && isValidAllName(name) && isValidAllName(patronymic);
}
bool Person::isValidDay(int day) {
return day > 0 && day <= 31;
}
bool Person::isValidMonth(int month)
{
return month > 0 && month <= 12;
}
bool Person::isValidYear(int year)
{
return year > 0 && year <= 2018;
}
bool Person::isValidAllName(const char* word)
{
char simbol = word[0];
return simbol >= 65 && simbol <= 104 || simbol >= 192 && simbol <= 223;
}
bool Person::isValidDate(int day, int month, int year)
{
return isValidDay(day) && isValidMonth(month) && isValidYear(year);
}
Видимо, что-то в блоке try-catch, просмотрел код сто раз, но ошибку так и не нашел. Заранее спасибо за помощь.
Вот информация об ошибках
1>------ Build started: Project: Lab_1, Configuration: Debug Win32 ------
1>Main.cpp
1>c1xx : warning C4199: two-phase name lookup is not supported for C++/CLI, C++/CX, or OpenMP; use /Zc:twoPhase-
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.12.25827\include\xlocale(505): error C2760: syntax error: unexpected token 'identifier', expected 'catch'
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.12.25827\include\xlocale(505): note: This diagnostic occurred in the compiler generated function 'const _Facet &std::use_facet(const std::locale &)'
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.12.25827\include\xlocale(2161): error C2760: syntax error: unexpected token 'identifier', expected 'catch'
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.12.25827\include\xlocale(2315): note: see reference to class template instantiation 'std::ctype<_Elem>' being compiled
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.12.25827\include\xlocnum(149): error C2760: syntax error: unexpected token 'identifier', expected 'catch'
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.12.25827\include\xlocnum(266): note: see reference to class template instantiation 'std::numpunct<_Elem>' being compiled
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.12.25827\include\xlocnum(181): error C2760: syntax error: unexpected token 'identifier', expected 'catch'
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.12.25827\include\xlocnum(338): error C2760: syntax error: unexpected token 'identifier', expected 'catch'
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.12.25827\include\xlocnum(1220): note: see reference to class template instantiation 'std::num_get<_Elem,_InIt>' being compiled
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.12.25827\include\xlocnum(1271): error C2760: syntax error: unexpected token 'identifier', expected 'catch'
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.12.25827\include\xlocnum(1666): note: see reference to class template instantiation 'std::num_put<_Elem,_OutIt>' being compiled
1>Done building project "Lab_1.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Начнем с несуществующего пространства имен System
.
Далее, сама конструкция типа
try
{
if (isValid)
{
this->name = Name;
}
else
{
throw isValid;
}
}
catch (bool valid)
{
cout << "Not valid name! " << Name << endl;
}
вместо простого и понятного
if (isValid)
this->name = Name;
else
cout << "Not valid name! " << Name << endl;
мягко говоря, удивляет. Зачем?!! Да и явно перекрывающиеся проверки тоже непонятно к чему. И еще - раз valid
в
catch (bool valid)
не используется - лучше писать
catch (bool)
Но в любом случае ошибка при компиляции только одна - C2871, неизвестное пространство имен. Удалив его, получаем пачку предупреждений (о ненужной valid
), но код компилируется.
Чего вы недоговорили? :)
Может, это не совсем С++, а C++/CLI? тогда встречный вопрос - у вас в коде нет ничего специфичного, может, простого консольного приложения будет достаточно?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
есть отдельный поток класс который работает с Socket-омКогда я отключаю клиент он все равно продолжает работать
Здравствуйте, разрабатываю грубо говорю систему для автоматического проведения олимпиад и вот столкнулся с проблемой синхронизации, точне...