Нет - я не понимаю, как этот код может вызвать ошибку переопределения.
И на самом деле, вы можете скомпилировать его и убедиться в этом .
РЕДАКТИРОВАТЬ: Теперь, когда вы указали ссылку на упомянутую вами страницу MSDN ...
На этой странице MSDN говорится о столкновениях имен в контексте using
директива :
Если локальная переменная имеет то же имя, что и переменная пространства имен, переменная пространства имен скрыта.Ошибочно иметь переменную пространства имен с тем же именем, что и у глобальной переменной.
Вот пример локальной переменной, скрывающей переменную пространства имен, которая была введена в область видимостидиректива using
:
namespace ns
{
const int MAX = 3;
}
using namespace ns;
int main()
{
int MAX = 4; // local
int test = MAX; // test is 4, because the local variable is used
// as the namespace variable is hidden
}
Включение директивы using
переносит все имена, объявленные в пространстве имен ns
, в область видимости.Однако когда я присваиваю значение MAX
для test
, в назначении используется локальная переменная MAX
, поскольку переменная пространства имен MAX
скрыта.Локальная переменная имеет приоритет и скрывает переменную пространства имен.
Теперь вот пример столкновения между переменной пространства имен и глобальной переменной.Рассмотрим этот исправленный кусок кода (и вы можете увидеть, что он компилируется здесь ):
const double MAX = 3.5;
namespace ns
{
const int MAX = 3;
}
using namespace ns;
int main()
{
int test = MAX;
}
Опять же, директива using
переносит ns:MAX
в область видимости и глобальную переменную MAX
также находится в области действия.
Когда я использую переменную с именем MAX
в main()
, компилятор сообщает об ошибке, поскольку имя MAX
теперь неоднозначно: у него нет возможности узнатьо котором MAX
мы имеем в виду, поскольку есть два нелокальных MAX
на выбор: ни один не имеет никакого приоритета.
prog.cpp: In function ‘int main()’:
prog.cpp:13: error: reference to ‘MAX’ is ambiguous
prog.cpp:2: error: candidates are: const double MAX
prog.cpp:6: error: const int ns::MAX
prog.cpp:13: error: reference to ‘MAX’ is ambiguous
prog.cpp:2: error: candidates are: const double MAX
prog.cpp:6: error: const int ns::MAX