Определение статической переменной немного похоже на объявление переменной extern
или прототипа функции.Он сообщает компоновщику, что переменная или функция существует где-то во всех единицах компиляции, но он не создает переменную , он просто говорит, что она где-то будет существовать.Переменная не существует.
Когда вы помещаете определение в файл заголовка, каждый файл, который включает этот заголовок, будет повторно объявлять переменную, и поэтому вы получаете ошибки компоновщика.Вы создаете несколько переменных с одним и тем же именем, поэтому компоновщик не знает, какую из них использовать.
Когда вы помещаете фактическое определение в файл cc
, вы создаете переменная там один раз , и каждый раз, когда кто-то использует ее где-то еще в проекте, он использует эту.
Так что, по сути, вы все делаете правильно.