n standard C++, the initialization order of objects with static storage
type that are declared in separate translation units
is unspecified. If, for instance, a constructor of object A takes as an argument a value returned from a member function of object B, B must be constructed before A. However, if A and B are defined in separately compiled files, there's no guarantee that B will be constructed first.
How can you ensure that objects defined in separately compiled files are constructed in a desired order?
Avoid global objects. Use special accessor functions instead.