проблема объявления time_t во время компиляции

В моем коде используются time_t и Struct tm. Я не могу инициировать структуру tm так, как я это делаю. Если это инициализировано в функции, то все работает нормально. Пожалуйста помоги

#include "time.h"
static struct tm strtime;
struct tm * timeinfo;
time_t startTime;
time_t endTime;
time_t curTime;
time_t candleStartTime;
strtime.tm_hour = 9; //Error here
strtime.tm_min = 15; //Error here
strtime.tm_sec = 00; //Error here
void PrintMarketData(void **args,nsString sPfName)
{
    curTime = time (NULL);
    timeinfo = localtime (&curTime);
    int curYear = timeinfo->tm_year;
    int curMonth = timeinfo->tm_mon;
    int curDay = timeinfo->tm_mday;

    strtime.tm_year = curYear;
    strtime.tm_mon = curMonth;
    strtime.tm_mday = curDay;
}

person Akshay    schedule 11.11.2016    source источник


Ответы (1)


Для этих трех строк:

strtime.tm_hour = 9; //Error here
strtime.tm_min = 15; //Error here
strtime.tm_sec = 00; //Error here

Вы не можете инициализировать такой глобальный экземпляр (построчные операторы присваивания) в глобальной области видимости. Это должно быть сделано внутри функции:

Вместо этого вы можете попробовать это:

struct tm strtime = {0, 15, 9};

Это может сработать, если предположить, что элементы strtime объявлены в ожидаемом порядке: tm_sec, tm_min, за которыми следует tm_hour. Но я не могу гарантировать, что порядок членов struct tm является стандартным для каждой платформы.

Честно говоря, лучше просто выполнить явную инициализацию, как это было в начале main.

person selbie    schedule 11.11.2016
comment
Заказы участников struct всегда стандартизированы. - person Potatoswatter; 11.11.2016