Это потому, что когда вы объявляете переменную static
внутри (скажем .h
) файла и включаете этот файл в различные .cpp
файлы, то для каждого файла .cpp (единицы перевода) создается отдельная копия переменной создается . Например,
// x.h ...
namespace Forces {
static int MAX_LIFETIME; // unique copy for each translation unit (.cpp)
static float GRAVITY_FORCE; // same as above
extern int SOMETHING; //<----- creates only single copy
};
Как показано, вы должны создать переменную как extern
внутри namespace
и определить эту переменную только в одном из .cpp
файлов.
Другой способ заключается в том, чтобы заключить их в class
вместо namespace
:
class Forces {
static int MAX_LIFETIME; // only 1 copy
static float GRAVITY_FORCE; // only 1 copy
};
Вы все равно должны определить их в одном из .cpp
файлов как,
int Forces::MAX_LIFETIME = <>;