2016-11-11 6 views
1

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

#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; 
} 

ответ

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.

+0

'' '' порядки членов '' 'структуры стандартизированы. – Potatoswatter