Почему эта ошибка возникает только для var2? , если вы включите file1.h
и file2.h
в один и тот же исходный файл test.cpp
, тогда var2
будет иметь два определения, и компилятор не сможет выбрать, какой один взять и выдает ошибку.
Чтобы избежать этого, объявите var2
как extern
в заголовочном файле .h
и определите в соответствующем исходном файле .cpp
.
Хотя в случае var1
это просто declaration
, а не definition
, поэтому он не выдаст ошибку, т. Е. Возможно многократное объявление.
Также объявление static
, как
static bool var1;
означает, что переменная var1
видна только в текущей единице компиляции.
Примечание: переменная static
имеет внутреннюю связь, т.е. скрывает переменную static
от других единиц перевода. Хотя static
переменные могут быть defined
в нескольких единицах перевода.
Переменная
и extern
, имеющая внешнюю связь, т.е. переменная extern
будет видна другим единицам перевода, но переменная extern
должна быть определена только в одной единице перевода.