Witam, miałem za zadanie stworzenie struktury opisującej czas, która miała składać się z pól godzina, minuta, sekunda oraz funkcji składowych oddzielnie zwiększających każde pole o 1, plus funkcji składowej wyświetlającej czas w formacie HH:MM:SS. Teraz mam następujące zadanie:
Do struktury opisującej czas dodać funkcję składową ‘time_of_day() const’ zwracającą
porę dnia (rano, dzień, wieczór, noc). Pora dnia powinna być opisana typem
wyliczeniowym enum class Time_of_day.
Napisać funkcję to_string(Time_of_day) zwracającą std::string, która zamieni
wartość wyliczeniową na napis.
W funkcji main dodać kod pozwalający na zweryfikowanie działania dodanych funkcji.
Kod źródłowy w plikach include/s1234/Time.h (nagłówek) i src/s03-Time.cpp (implementacja i funkcja
main).
Tak wygląda mój plik nagłówkowy:
#include <iostream>
#include <string>
struct Time {
int godzina;
int minuta;
int sekunda;
auto to_string() const -> std::string; // funkcja zwracająca godzinę w podanym formacie
auto next_hour() -> void;
auto next_minute() -> void;
auto next_second() -> void;
enum class Time_of_day
{
Rano,
Dzien,
Wieczor,
Noc
};
auto time_of_day() const -> Time_of_day;
auto to_string(Time_of_day) -> std::string;
Time(int godzina, int minuta, int sekunda);
};
A tak plik główny:
#include <s25441/Time.h>
#include <iomanip>
#include <iostream>
#include <string>
Time::Time(int godz, int min, int sek)
: godzina{godz}, minuta{min}, sekunda{sek}
{}
auto ::Time::next_hour() -> void
{
if (godzina < 23) {
godzina++;
} else {
godzina = 0;
}
}
auto ::Time::next_minute() -> void
{
if (minuta < 59) {
minuta++;
} else {
next_hour();
minuta = 0;
}
}
auto ::Time::next_second() -> void
{
if (sekunda < 59) {
sekunda++;
} else {
next_minute();
sekunda = 0;
}
}
auto ::Time::to_string() const -> std::string
{
std::string godz = std::to_string(godzina);
std::string min = std::to_string(minuta);
std::string sek = std::to_string(sekunda);
if (godzina < 10) {
godz = "0" + godz;
}
if (minuta < 10) {
min = "0" + min;
}
if (sekunda < 10) {
sek = "0" + sek;
}
return godz + ":" + min + ":" + sek;
}
auto::Time::time_of_day() const -> Time_of_day
{
if ((godzina >= 23) && (godzina <= 5)) {
return Time_of_day::Noc;
} else if ((godzina >= 6) && (godzina <= 10)) {
return Time_of_day::Rano;
} else if ((godzina >= 11) && (godzina <= 16)) {
return Time_of_day:: Dzien;
} else if ((godzina >= 17) && (godzina <= 22)) {
return Time_of_day::Wieczor;
}
}
auto::Time::to_string(Time_of_day t) -> std::string
{
if (t ==Time_of_day:: Rano) {
return "Rano";
}
else if(t ==Time_of_day:: Dzien){
return "Dzien";
}
else if(t ==Time_of_day:: Wieczor){
return "Wieczor";
}
else{
return "Noc";
}
}
auto main() -> int
{
auto czas = Time(23, 59, 59);
std::cout << czas.to_string() << std::endl;
czas.next_minute();
std::cout<<czas.to_string(Time_of_day)<<std::endl;
std::cout << czas.to_string() << std::endl;
czas.next_second();
std::cout << czas.to_string() << std::endl;
czas.next_hour();
std::cout << czas.to_string() << std::endl;
return 0;
}
Poprzednie zdanie działa poprawnie. Problem mam z wywłaniem funkcji to_string(TIme_of_day) w funkcji main, ponieważ wyświetla mi błąd, że "‘Time_of_day’ was not declared in this scope", co jest zrozumiałe, bo enum class znajduje się w pliku nagłówkowym, ale przecież musi tam być, aby zadeklarować funkcję time_of_day() zwracającą Time_of_day. Czy ktoś byłby w stanie pomóc mi rozwiązać ten problem? Z góry dziękuję!