Из gmtime
документации :
Возвращаемое значение указывает на статически выделенную структуру, которая может быть перезаписана последующими вызовами любой из функций даты и времени .
blockquote>ОК, это была документация по Linux, но поведение в Windows одинаково.
И вы столкнулись с проблемой:
tm* then = gmtime(&startTime); cout << (then->tm_hour); tm* now = gmtime(&eventTime);
then
иnow
оба указывают на один и тот же объект! Таким образом, вы теряете информацию с первого вызова gogmtime
, который перезаписывается вторым вызовом!MSVC пытается спасти вас от этой ошибки, просто не позволяя использовать gmtime по умолчанию. Чтобы отключить предупреждение / ошибку, вам нужно использовать макрос, который отображается в ошибке:
_CRT_SECURE_NO_WARNINGS
. Либо #define это прямо в начале, прежде чем включать заголовок или добавить его в качестве определения предварительного процессора в настройках проекта IDE.Сторона примечания: Правильное решение вашей ошибки:
tm then = *gmtime(&startTime); tm now = *gmtime(&eventTime);