Объявление функции как статической в заголовочном файле вызывает объявленную, но не определенную ошибку

0

Предположим, у меня есть заголовочный файл, подобный этому

namespace a
{
    static void fun();
}

и у меня есть его определение в исходном файле

namespace a
{
    void fun()
    {
    }
}

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

  • 1
    Вы объявляете статическую функцию в каждой единице перевода, включая этот заголовок, но определяете ее только в одной . И вы удивились, что получили неразрешенные ссылки, потому что ..?
  • 0
    @WhozCraig, как мне сделать так, чтобы другие единицы перевода также распознавали единственное определение, которое я написал для него? Я хочу, чтобы все единицы перевода, которые включают этот заголовочный файл, получили это единственное определение. Благодарю.
Показать ещё 4 комментария
Теги:
static

1 ответ

5
Лучший ответ

Статическое ключевое слово в этом случае означает, что область действия функции fun() ограничена файлом, то есть имеет область действия файла. При удалении статики он имеет глобальную область видимости, но только в пространстве имен.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню