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

Два файла .cpp в проекте - C++

Восстановить пароль Регистрация
 
DmitryM5
Love~
 Аватар для DmitryM5
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 743
Записей в блоге: 1
19.09.2013, 17:29     Два файла .cpp в проекте #1
Файлы DayOfWeek и main(откуда вызываются методы из DayOfWeek).
Пишет ошибку на скрине,что не так?
И что такое #include <stdexcept>?
DayOfWeek.cpp
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
#include <iostream>
#include <stdexcept>
#include <locale>
 
using std::cout;
using std::cin;
using std::endl;
 
enum DayOfWeek {MON=1,TUE,WED,THU,FRI,SAT,SUN} ;
 
void printDayOfWeek(DayOfWeek dayOfWeek) {
    switch(dayOfWeek) {
    case 1: cout<<"Monday "<<endl;
        break;
    case 2: cout<<"Tuesday "<<endl;
        break;
    case 3: cout<<"Wednesday "<<endl;
        break;
    case 4: cout<<"Thursday "<<endl;
        break;
    case 5: cout<<"Friday "<<endl;
        break;
    case 6: cout<<"Saturday"<<endl;
        break;
    case 7: cout<<"Sunday "<<endl;
        break;
 
    }
}
 
DayOfWeek readDayOfWeek() {
    int day;
    cin >> day;
    if ( (day<1)||(day>7) ) {
        throw std::range_error("number of day should be in a range [1, 7]");
    }
    return static_cast<DayOfWeek>(day); // cast: int -> DayOfWeek
}
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <locale>
 
using namespace std;
 
enum DayOfWeek {};
void printDayOfWeek();
DayOfWeek readDayOfWeek();
 
int main() {
    std::locale::global(std::locale(""));
    cout<<"Введите день недели 1-7 "<<endl;
    DayOfWeek dow=readDayOfWeek();
    printDayOfWeek(dow);
    system("pause");
    return 0;
}
Миниатюры
Два файла .cpp в проекте  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
19.09.2013, 17:40     Два файла .cpp в проекте #2
Цитата Сообщение от DmitryM5 Посмотреть сообщение
C++
1
void printDayOfWeek();
У тебя прототип функции объявлен без параметра. 7-я строка в последнем листинге.
DmitryM5
Love~
 Аватар для DmitryM5
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 743
Записей в блоге: 1
19.09.2013, 17:43  [ТС]     Два файла .cpp в проекте #3
Цитата Сообщение от castaway Посмотреть сообщение
У тебя прототип функции объявлен без параметра.
Только что исправил,спасибо!Достаточно тип указать!?

Остались два вопроса:
1.Что такое #include <stdexcept>?
2.Ниже код исключения как я понимаю,если пользователь вводит число не от 1 до 7 то должно вывести соответствующее сообщение в кавычках!?Но выводит то что на скрине ниже...
C++
1
2
3
if ( (day<1)||(day>7) ) {
        throw std::range_error("number of day should be in a range [1, 7]");
    }
Миниатюры
Два файла .cpp в проекте  
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
19.09.2013, 17:45     Два файла .cpp в проекте #4
Цитата Сообщение от DmitryM5 Посмотреть сообщение
1.Что такое #include <stdexcept>?
Это заголовочный файл, который определяет стандартные исключения. Второй вопрос как раз с ними и связан.
Возможно я бы смог ответить на твой вопрос, если бы видел весть код и смог его запустить..
DmitryM5
Love~
 Аватар для DmitryM5
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 743
Записей в блоге: 1
19.09.2013, 17:48  [ТС]     Два файла .cpp в проекте #5
Цитата Сообщение от castaway Посмотреть сообщение
Это заголовочный файл, который определяет стандартные исключения. Второй вопрос как раз с ними и связан.
Так так и должно вывести исключение?
Где надпись "number of day should be in a range [1, 7]" ???
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
19.09.2013, 17:50     Два файла .cpp в проекте #6
Цитата Сообщение от DmitryM5 Посмотреть сообщение
Так так и должно вывести исключение?
Где надпись "number of day should be in a range [1, 7]" ???
Не могу сказать точно. Я в MSVS не работаю, возможно у тебя не включены исключения.. Код целиком дать можешь?
DmitryM5
Love~
 Аватар для DmitryM5
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 743
Записей в блоге: 1
19.09.2013, 17:53  [ТС]     Два файла .cpp в проекте #7
Цитата Сообщение от castaway Посмотреть сообщение
Не могу сказать точно. Я в MSVS не работаю, возможно у тебя не включены исключения.. Код целиком дать можешь?
Но вон он же в самом верху, DayOfWeek.cpp
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
19.09.2013, 17:54     Два файла .cpp в проекте #8
Да, понял.
В консольном приложении (компилятор GCC) у меня выводится:
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
terminate called after throwing an instance of 'std::range_error'
what(): number of day should be in a range [1, 7]
DmitryM5
Love~
 Аватар для DmitryM5
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 743
Записей в блоге: 1
19.09.2013, 17:56  [ТС]     Два файла .cpp в проекте #9
Цитата Сообщение от castaway Посмотреть сообщение
Да, понял.
В консольном приложении (компилятор GCC) у меня выводится:
т.е. скорее всего что-то у меня в другом не так,а строка исключения верна?)
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
19.09.2013, 17:59     Два файла .cpp в проекте #10
Цитата Сообщение от DmitryM5 Посмотреть сообщение
т.е. скорее всего что-то у меня в другом не так,а строка исключения верна?)
Бросаешь исключение ты правильно, так же правильно подключаешь заголовок stdexcept, а вот почему у тебя происходит "не то", я сказать, к сожалению, не могу..
DmitryM5
Love~
 Аватар для DmitryM5
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 743
Записей в блоге: 1
19.09.2013, 18:05  [ТС]     Два файла .cpp в проекте #11
Цитата Сообщение от castaway Посмотреть сообщение
Бросаешь исключение ты правильно, так же правильно подключаешь заголовок stdexcept, а вот почему у тебя происходит "не то", я сказать, к сожалению, не могу..
Окей,спасибо и на этом.
Вот еще один вопросик про Заголовочные файлы:
Вот мой заголовочный файл к предыдущим заданиям:
Почему в первых двух строках я могу писать нижние подчеркивание сколько хочу и где хочу?(Day_O_f_W_eek_h)
Это же имя файла по идее,который привязан как то к DayOfWeek.cpp Так получается совсем другое имя файла..?

C++
1
2
3
4
5
6
7
8
9
10
#ifndef Day_Of_Week_h
#define Day_Of_Week_h
 
enum DayOfWeek {MON = 1, TUE, WED, THU, FRI, SAT, SUN};
 
void printDayOfWeek(DayOfWeek dayOfWeek);
DayOfWeek readDayOfWeek() ;
 
 
#endif /*Day_Of_W
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
19.09.2013, 18:08     Два файла .cpp в проекте #12
Цитата Сообщение от DmitryM5 Посмотреть сообщение
Почему в первых двух строках я могу писать нижние подчеркивание сколько хочу и где хочу?(Day_O_f_W_eek_h)
Это же имя файла по идее,который привязан как то к DayOfWeek.cpp Так получается совсем другое имя файла..?
Это не имя файла, это макроопределение, ты можешь его назвать как хочешь, но имя должно быть уникальным в одном проекте.
Тут ключевые слова: #ifndef, #define и #endif - которые обезопасят тебя от включения одного заголовка дважды.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.09.2013, 18:13     Два файла .cpp в проекте #13
Цитата Сообщение от DmitryM5 Посмотреть сообщение
Где надпись "number of day should be in a range [1, 7]" ???
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main() {
    std::locale::global(std::locale(""));
    cout<<"Введите день недели 1-7 "<<endl;
    DayOfWeek dow;
    try
    {
        dow = readDayOfWeek();
    }
    catch(exception &e)
    {
        cout << e.what() << endl;
        system("pause");
        return 0;
    }
    printDayOfWeek(dow);
    system("pause");
    return 0;
}
Миниатюры
Два файла .cpp в проекте  
castaway
19.09.2013, 18:18
  #14

Не по теме:

alsav22, слона то я и не заметил...

alsav22
19.09.2013, 18:19
  #15

Не по теме:

Цитата Сообщение от castaway Посмотреть сообщение
alsav22, слона то я и не заметил...
Бывает...

DmitryM5
Love~
 Аватар для DmitryM5
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 743
Записей в блоге: 1
19.09.2013, 18:21  [ТС]     Два файла .cpp в проекте #16
Цитата Сообщение от castaway Посмотреть сообщение
Это не имя файла, это макроопределение, ты можешь его назвать как хочешь, но имя должно быть уникальным в одном проекте.
Тут ключевые слова: #ifndef, #define и #endif - которые обезопасят тебя от включения одного заголовка дважды.
Вроде бы понял,но как заголовок понимает,что он принадлежит именно тому файлу спп?))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2013, 18:26     Два файла .cpp в проекте
Еще ссылки по теме:

C++ Несколько cpp файлов в проекте
C++ Не удаётся связать два файла timer.h и timer.cpp
Компиляция файла cpp C++

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

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
19.09.2013, 18:26     Два файла .cpp в проекте #17
Цитата Сообщение от DmitryM5 Посмотреть сообщение
но как заголовок понимает,что он принадлежит именно тому файлу спп?
Макроопределение не является локальным для файла. Препроцессор собирает все файлы (*.h, *.cpp и т.п. последовательно), т.е. после включения заголовочного файла DayOfWeek.h, макроопределение, объявленное в этом файле, будет объявлено и в последующих.
Я думаю для этого вопроса следует создать отдельную тему.
Yandex
Объявления
19.09.2013, 18:26     Два файла .cpp в проекте
Ответ Создать тему
Опции темы

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