![]() |
|
Модераторы: bsa |
![]()
|
|
| KuMa1104 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: 1 Всего: 3 |
Не понятна причина вот такого ограничения.
Почему можно присваивать значения переменной ab Но нельзя массиву? -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
|||
|
||||
| Чoо |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 22.9.2009 Репутация: 4 Всего: 4 |
правильно так:
а почему компилятор разрешает инициализировать ab для меня не совсем понятно. Но вообще, по умолчанию статические элемент ыкласса инициализируются нулем. Поэтому, смею предположить, что e[], поскольку это указатель, указывает на 0x00000000, а мы пытаемся заполнить память, которая еще не выделена. но я не уверен. Самому интересно даже стало почему так -------------------- ![]() OS: Debian Squeeze (kernel 3.8.2) IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
||||
|
||||
| KuMa1104 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: 1 Всего: 3 |
Мда это уже вообще жуть. Как раз про это в книжке читаю. Давайте разберемся по порядку. вот так нельзя.
Как я понимаю обявления класса описывает как должен выглядеть обект но не создает его. Но добавляю спецификатор const и О чудо!! всё работает!!! Добавлено через 2 минуты и 1 секунду Вот только в чудеса я не верю. (Покрайне мере не в такие) что меняться. Почему указание что элемент данных являеться const. Позволяет написать такое ?
-------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
||||
|
|||||
| mes |
|
||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Добавлено через 51 секунду
без инициализатора объявление, с ним - определение.. Добавлено через 1 минуту и 22 секунды
некоторая уловка разрешенная стандартом.. |
||||||
|
|||||||
| KuMa1104 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: 1 Всего: 3 |
И вот так тоже нельзя
видимо по тойже причине. -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
в новом стандарте это все позволено: http://www.open-std.org/JTC1/SC22/WG21/doc.../2008/n2756.htm
другое дело, что на данный момент, это реализовали только в EDG. ждем... |
|||
|
||||
| KuMa1104 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: 1 Всего: 3 |
Вот не совсем понял. Значит это просто фикция такая. И в действительности нету ни каких оснований. Для такого запрета????? Добавлено через 55 секунд Ох как мы синхронно сообщения пишем . я уж путаться начал. -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
зы
кстати позавчера вышел релиз gcc-4.5.2. к концу 2010 года зашевелились-то как ;) Добавлено через 3 минуты и 4 секунды а в тестовой ветке, в версию 4.6.0 встроили поддержку Go: http://gcc.gnu.org/gcc-4.6/changes.html#go и еще реализовали Range-based for |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
причины для "разрешения" такой инициализации разные.. Добавлено через 50 секунд да.. это специально введено "нарушение" общей логики, для получения некоторых удобств.. Добавлено через 2 минуты и 12 секунд не заморачивайтесь над этим.. запомните что так бывает.. а вернетесь тогда, когда действительно понадобится (к тому времени, будем надеяться, уже новый стандарт будет, где подобные места немного разровнены ) |
|||
|
||||
| KuMa1104 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: 1 Всего: 3 |
Да почитал.
Но мне кажется что для меня это пока слишком глубаковато. Думаю если даже вдумчиво прочитаю многое ускользнет. Ох как это не похоже на родной C#(( Хорошо но я могу написать так
Я так понимаю это наиболее корректный способ. Добавлено через 2 минуты и 11 секунд я так понимаю что
это и естm инициализатор. -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
для статической функции ? при определении вне класса.. Добавлено через 1 минуту и 15 секунд у Чoо в посту показан "наиболее корректный" способ.. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
вот так еще можно:
http://liveworkspace.org/code/f068cd189356...a057a395bf44dd4 Добавлено через 2 минуты а мне enum{ ab = 7 }; привычнее. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
а что gcc еще не поддерживает range based for loop ? или нa lws "старый" ? Добавлено через 1 минуту и 36 секунд "корректный" для инициализации статических членов.. a enum в данном случае сбоку.. Это сообщение отредактировал(а) mes - 18.12.2010, 01:10 |
|||
|
||||
| KuMa1104 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: 1 Всего: 3 |
Бр.. На это вообще пока смотреть жутко. Хорошо. Кажется смысл понял) -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
уже написано оказывается.. не заметил |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
реализовано в 4.6.0. но эта ветка считается экспериментальной. что-то я ей недоверяю... |
|||
|
||||
| KuMa1104 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: 1 Всего: 3 |
Хотя вот знаете что ещё немного смущает.
Зачем повторно указывать const int
Разве того что я их уже так декларировал в определении не достаточно? -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| KuMa1104 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: 1 Всего: 3 |
Огого!!! Хорошо. Значит если я напишу
То компилятор это будет считать как простое присваивание. И будет Ругаться так как я пытаюсь константе значение поменять!!!!! Мда.. Суровая штука!!!!!!!!!!!!!!!!!!!! -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
и не только поэтому.. потому что присваивание не разрешено не в контексте функций... т.е. там где должны произвести инициализацию статических переменных.. т.е. даже если не константа, то все равно заорет.. |
|||
|
||||
| KuMa1104 |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: 1 Всего: 3 |
Да действительно. Заорала.
А это для меня был сюрприз. хотя это логично. 1. потому что присваивание не разрешено не в контексте функций... С этим понятно было бы странно еслиб я где угодно это мог бы сделать. Хотя вот так тоже почему то нельзя. Хотя присваивание идёт в функции.
Добавлено через 2 минуты и 58 секунд По идеи. У меня одно ab для всех экземпляров класса BaseConstant.
Но её не видно! -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
в C++ нет статических классов как в шарпе
у вас аб declared, но не defined.. чтоб был defined нужен инициализатор.. Добавлено через 1 минуту и 24 секунды ее видно, но для нее не выделено место в памяти.. так как компилер не знает в каком из (cpp-) модулей ее выделять Добавлено через 1 минуту и 51 секунду и поправьте пож Ваш пост.. читать неудобно .. |
|||
|
||||
| KuMa1104 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: 1 Всего: 3 |
Да Вы правы Значит раз мне компилятор не выдавал ошибок то он игнорировал это определение!!
Точно теперь понял!!!! Спасибо вам большое, если бы было можно яб Вам 10 плюсов поставил бы. А то один как то за ткое хорошее объяснение это как то даже не серьёзно)))) -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
|||
|
||||
| Чoо |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 22.9.2009 Репутация: 4 Всего: 4 |
зато можно так
Добавлено через 1 минуту и 36 секунд правда такая константа создается для каждого объекта Это сообщение отредактировал(а) Чoо - 18.12.2010, 02:14 -------------------- ![]() OS: Debian Squeeze (kernel 3.8.2) IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2 |
||||||
|
|||||||
| KuMa1104 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: 1 Всего: 3 |
А как это понять. Здесь происходит наследование(что само по себе звучит странно), или это способ указать что при использовании данного конструктора должна происходить инициализация ab значением 7. (внутренний инициализатор получается ) -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| KuMa1104 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: 1 Всего: 3 |
-------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
|||
|
||||
| Чoо |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 22.9.2009 Репутация: 4 Всего: 4 |
KuMa1104, да, это инициализация константного члена класса в списке инициализации конструктора
-------------------- ![]() OS: Debian Squeeze (kernel 3.8.2) IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2 |
|||
|
||||
![]()
|
| Правила форума "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. |