Возьмем для примера:
// myheader.h
static int myStaticVar = 0;
// If we remove 'static' the compiler will throw linker error.
void DoStuff();
// and myheader.cpp, and main.cpp; etc
Вот как я бы это объяснил:
Статические переменные не имеют внешней связи, и когда мы компилируем без 'static' мы «включаем» статическую переменную (которая здесь глобальная) в каждый файл, что создает дубликаты, и компоновщик выдаст ошибку, поскольку множественное объявление не допускается.
Есть ли лучший способ объяснить это? Спасибо.
PS: Мы предполагаем, что в заголовочном файле должны быть статические переменные (не говоря уже о членах)?