![]() |
|
Модераторы: bsa |
![]()
|
|
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
OlegSK
Ты все путаешь, от того и непонимание.
|
|||
|
||||
| OlegSK |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 17.7.2010 Репутация: нет Всего: нет |
А почему тогда приходится обращаться к этой переменной через оператор ::? Разве он не указывает на переменную находящуюся в анонимном пространстве имен? И вообще, от куда взялась неоднозначность если обе переменные не видны одновременно, а одна скрыла другую? Ведь и к примеру в функции можно создать локальную переменную одноименную глобальной, скрыв ее при этом и ничего, никаких неоднозначностей при обращении к ней не возникает...
Это сообщение отредактировал(а) OlegSK - 22.7.2010, 20:20 |
|||
|
||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Потому что :: указывает, что переменная находиться в глобальном пространстве имен, переменную мы обявили в глобальном пространстве имен. Все логично.
Кто? |
||||
|
|||||
| OlegSK |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 17.7.2010 Репутация: нет Всего: нет |
Оператор :: ... Добавлено @ 20:25 В общем, до меня дошло... Благодарю за помощь!!! Это сообщение отредактировал(а) OlegSK - 22.7.2010, 20:52 |
|||
|
||||
| OlegSK |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 17.7.2010 Репутация: нет Всего: нет |
Почему компилятор не знает к какой именно переменной обратиться, если переменая из глобального пространства имен скрывает переменную из ананимного пространства имен и по сути остается единственной доступной программе? По крайней мере я так понял из следующего поста:
... В обычной функции я тоже могу сделать локальную переменную одноименную глобальной (которая при этом будет скрыта), и никаких неоднозначностей при обращении к ней не возникает... Чего я еще недопонимаю? Или тут дело в том, что в моем примере с функцией одна из переменных локальная а другая глобальная, в то время как в выше рассмотренной ситуации обе переменных были глобальными (по крайней мере, в пределах единицы трансляции, т.е. в одном файле)? Это сообщение отредактировал(а) OlegSK - 22.7.2010, 21:18 |
||||
|
|||||
| nmn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 593 Регистрация: 26.11.2005 Репутация: нет Всего: 1 |
в функциях не возникает, а тут возникает, так как в общем случае может быть несколько пространств имен с одинаковыми переменными и компилятор не знает из какого пространства брать переменную |
|||
|
||||
| OlegSK |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 17.7.2010 Репутация: нет Всего: нет |
[QUOTE=nmn,22.7.2010, 22:30]
Это в общем-то понятно, но так и не объясняет ситуацию... Если бы имелось две одноименные переменные, которые были бы одновременно доступны программе, то обращение к такой переменной действительно создавало бы неоднозначность - это очевидно. Однако в вышерассмотренном случае переменная A из ананимного пространства имен становится недоступной программе, т.к. перекрывается переменной A из глобального пространства имен. Поэтому я не понимаю: от куда взялась неоднозначность, если программе на момент обращения к переменной A доступна только одна из этих переменных. Это сообщение отредактировал(а) OlegSK - 23.7.2010, 05:54 |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
не делай анонимные namespace тогда и проблем у тебя не будет в этом случае с пониманием.
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| OlegSK |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 17.7.2010 Репутация: нет Всего: нет |
Как избежать этой проблемки я уже знаю, но все же хотелось бы узнать: почему она возникает, т.е. почему возникает неоднозначность в, на на мой нубовский взгляд, - однозначном коде?... Это сообщение отредактировал(а) OlegSK - 23.7.2010, 10:07 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
а этот код на Ваш взгляд однозначен или нет ? |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
тут однозначен ибо к переменным мы обращаемся через
Это сообщение отредактировал(а) Dem_max - 23.7.2010, 11:36 -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| OlegSK |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 17.7.2010 Репутация: нет Всего: нет |
mes, в вашем примере, из-за объявлений using namespace A1 и using namespace A2, при обращении к переменной i возникнет неоднозначность... Однако, как я понял, особенность интересующей меня проблемы в том, что там используется ананимное пространство имен, особенностью которого является то, что переменные находящиеся в нем перекрываются переменными из глобального пространства имен, в случае их совпадений (то есть в случае перекрытия уже не удастся обратитья к переменной находящейся в ананимном пространстве имен). По этой причине, мне кажется что неоднозначности быть не должно (раз доступной остается только одна из двух одноименных переменных), и С обычными (именованными) пространствами имен такого не происходит; чтобы решить неоднозначность в вашем примере достаточно уточнить с помощью имени пространства имен к какой именно переменной i происходит обращение...
З.Ы: Неоднозначность в интересующем меня примере может возникнуть только в том случае, если компилятор не учитывает, что к перекрытой переменной из ананимного пространства имен больше нельзя обратиться и зачем-то продолжает ее учитывать. Видимо это и есть ответ на мой вопрос... Это сообщение отредактировал(а) OlegSK - 23.7.2010, 12:14 |
|||
|
||||
| nmn |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 593 Регистрация: 26.11.2005 Репутация: нет Всего: 1 |
unique_namespace_name - некоторое уникальное имя которое генерирует компилятор |
||||||
|
|||||||
| OlegSK |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 17.7.2010 Репутация: нет Всего: нет |
Я кажется понял, почему возникает интересующая меня ситуация. Компилятор обрабатывает ананимное пространство имен как обычное, не учитывая то, что его перекрытые переменные перестают быть доступными для кода программы (программе же не известно unique_namespace_name заданное компилятором для этого пространства имен)...
Это сообщение отредактировал(а) OlegSK - 23.7.2010, 12:27 |
|||
|
||||
| OlegSK |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 17.7.2010 Репутация: нет Всего: нет |
Благодарю, всех отвечавших мне за помощь!
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |