Предположим, у меня есть заголовочный файл, подобный этому
namespace a
{
static void fun();
}
и у меня есть его определение в исходном файле
namespace a
{
void fun()
{
}
}
Этот заголовочный файл может использоваться в собственном проекте этих файлов или в нескольких других проектах. Я получаю функцию fun(), объявленную, но не определенную ошибку. Я не понимаю, почему. Но если я удалю статику из объявления, это сработает!
Статическое ключевое слово в этом случае означает, что область действия функции fun() ограничена файлом, то есть имеет область действия файла. При удалении статики он имеет глобальную область видимости, но только в пространстве имен.