Здравствуйте, _agg, Вы писали:
_>Компилятор не выводит никаких сообщений что он игнорирует этот static, собирается это все в Visual Studio 2017.
_>КАК ТАКОЕ ПРОИСХОДИТ ЭТО ЖЕ STATIC? КАК ОН МОЖЕТ СОЗДАВАТЬСЯ МНОЖЕСТВО РАЗ, ВРАЗУМИТЕ КТО ПОНЯЛ В ЧЕМ ДЕЛО, ЧЕГО Я НЕ ВИЖУ ЧТО ПРИВОДИТ К МНОЖЕСТВЕННОМУ СОЗДАНИЮ ОБЪЕКТА СО СПЕЦИФИКАТОРОМ STATIC?
static относительно глобальной переменной ведёт себя иначе по сравнению с переменной в классе или функции. И не гарантирует единичного создания. Он только говорит, что переменная должна быть уникальна для данного файла. В вашем случае в каждом месте, где вы подключаете transfer.h получаете отдельный экземпляр currentClientVersion.
Можете обернуть переменную currentClientVersion в функцию или класс
Utils::VERSION& getCurrentClientVersion()
{
static Utils::VERSION currentClientVersion;
return currentClientVersion;
}
, или объявить extern const Utils::VERSION currentClientVersion в заголовочном и инициализировать в одном из cpp.