Наличие ошибки компоновщика «Неразрешенный внешний»

#c #windows

Вопрос:

У меня есть код в двух файлах, таких как:

Static.cpp:

 static int s_Variable = 5;
 

Main.cpp:

 extern int s_Variable;
 

Я получаю эту ошибку:

 Build started...
1>------ Build started: Project: HelloWorld, Configuration: Debug Win32 ------
1>Static.cpp
1>Main.obj : error LNK2001: unresolved external symbol "int s_Variable" (?s_Variable@@3HA)
1>E:Visual Studio 2019DevCPPSeriesHelloWorldbinWin32DebugHelloWorld.exe : fatal error LNK1120: 1 unresolved externals
1>Done building project "HelloWorld.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
 

Все правильно компилируется в каждом файле, поэтому я знаю, что это просто проблема со связыванием. Что именно не так?

Ответ №1:

Статические глобальные переменные не имеют внешней связи; в некотором смысле они являются «локальными» для данной единицы перевода. Вам придется использовать нестатическую глобальную переменную, если вы хотите ссылаться на нее в отдельной единице перевода.

Комментарии:

1. Формальные детали . См. Пояснительный пункт 3. Остальную часть страницы стоит прочитать для общих знаний.