То, что он говорит, что переменная где-то уже определена, это правда. Для данной единицы трансляции, если в ней нет определения переменной, extern делает лишь объявление
Екстерн принято писать там где вы хотите её использовать, а там где создали и определили не надо, по умолчанию стоит внешнее связывание у не cv квалификованых