I would like to use the tm struct as a static variable in a class. Spent a whole day reading and trying but it still can't work :( Would appreciate if someone could point out what I was doing wrong
In my class, under Public, i have declared it as:
static struct tm *dataTime;
In the main.cpp, I have tried to define and initialize it with system time temporarily to test out (actual time to be entered at runtime)
time_t rawTime;
time ( &rawTime );
tm Indice::dataTime = localtime(&rawTime);
but seems like i can't use time() outside functions.
main.cpp:28: error: expected constructor, destructor, or type conversion before ‘(’ token
How do I initialize values in a static tm of a class?
You can wrap the above in a function:
To avoid possible linking problems, make the function static or put it in an unnamed namespace.
You can't call functions arbitrarily outside functions. Either do the initialization in your
main()
function, or create a wrapper class around thetm
struct with a constructor that does the initialization.Add this:
When the object file is initialized at run-time, the constructor Initializer() is called which then sets the "global" variable dataTime as you want. Note that the anonymous namespace construction helps to prevent potential clashes for the names Initializer and myinit.
Also note that your
struct tm
is a pointer to a tm struct. The return from localtime is a singleton pointer whose contents will change when you or anyone else calls localtime again.Wrap the whole thing in a function, and use that to initialize your static member:
And you don’t need to (and thus shouldn’t) prefix struct usage with
struct
in C++:tm
is enough, nostruct tm
needed.