У меня есть такой довольно небольшой код:Почему компилятор принимает определения двусмысленных переменных?
//example1
namespace
{
int a;
}
int a;
main()
{
a++;
return 0;
}
Конечно, г ++ 4.6.1 компилятор не может скомпилировать его и выводит сообщение об ошибке:
./temp.cpp: In function ‘int main()’:
./temp.cpp:10:5: error: reference to ‘a’ is ambiguous
./temp.cpp:6:5: error: candidates are: int a
./temp.cpp:2:9: error: int {anonymous}::a
Это все в порядке!
Но когда я удалить ссылку на переменную «в» внутри «главного» функции, программа компилируется хорошо:
//example2
namespace
{
int a;
}
int a;
main()
{
return 0;
}
1) Почему компилятор г ++ позволяет определять переменная «a», когда в таком случае она запрещает ссылки на нее?
2) Это просто функция компилятора g ++, и никакой другой компилятор не может скомпилировать такой код (пример2)?
3) Имеет ли компилятор g ++ соответствующие флаги для интерпретации такого кода (пример2) как неисправный?
Большое спасибо всем!
Действительно! :) Я предполагаю, что при использовании такой переменной «a» она должна быть помещена в конец исходного кода ... –
Он должен быть размещен там, где имеет смысл разместить его ... –