Статическая переменная существует только в пределах текущей единицы компиляции. Удалите static из его определения и измените его на «volatile» (хотя это предполагает, что вы используете несколько потоков, если нет, вам не нужно использовать volatile), и все должно быть в порядке.
Редактировать: Ваш ответ здесь, я предполагаю, что у вас есть следующий код:
a.cpp:
static float TIME_MOD = <some value>;
B.CPP:
static float TIME_MOD = <some value>;
Если вы делаете это, TIME_MOD существует в 2 местах, и это является источником ваших проблем. Вам нужно переписать код, похожий на этот.
a.cpp:
float TIME_MOD = <some value>;
B.CPP (и C.CPP, D.CPP и т. Д.):
extern float TIME_MOD;
А затем используйте TIME_MOD как обычно. Это говорит компилятору, что TIME_MOD находится где-то еще, и не стоит беспокоиться о том, что он не знает, что в нем содержится. Затем компоновщик пройдет и «свяжет» это плавающее определение TIME_MOD с правильным определением.
Стоит также отметить, что это, вероятно, работа с "extern float TIME_MOD;" где-нибудь в заголовочном файле и включая его в любые CPP-файлы, в которых он вам нужен. Тем не менее фактическое определение (то есть не внешнее определение) сохраните в одном и только одном файле.
Это, безусловно, объясняет тот факт, что я думал, что вы извлекаете статику (что я считал невозможным).