|
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
|
||||||
Инициализация статического массива08.05.2011, 23:37. Показов 18487. Ответов 45
Метки нет (Все метки)
Добрый вечер!
Допустим, что имеется класс
0
|
||||||
| 08.05.2011, 23:37 | |
|
Ответы с готовыми решениями:
45
Инициализация статического члена из шаблонного класса |
|
|
|||||||||||
| 10.05.2011, 22:23 | |||||||||||
|
Не помню точную формулировку, но с точки зрения стандарты выглядит что-то типа такого. Все обращения (чтение и запись) к переменной volatile должны быть ровно в том количестве и ровно в том порядке, как это вытекает из исходника. Такое же соотношение должно соблюдаться и между разными обращениями к volatile: т.е. чтения и записи различных volatile объектов или обращений по указателям нельзя переставлять и оптимизировать
Если есть, к примеру, исходник:
volatile обычно используют для адресов, которые являются портами ввода-вывода (т.е. являются не обычной памятью, а связанной с аппаратурой). Чтение из такого адреса может поменять состояние порта ввода-вывода, а потому компилятор не должен ничего оптимизировать с такими обращениями
2
|
|||||||||||
|
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
|
|
| 12.05.2011, 20:48 [ТС] | |
|
Evg, значит volatile была создан сугубо радио определённых целей, связанных с аппаратурой?
0
|
|
|
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
|
||||||
| 12.05.2011, 21:59 [ТС] | ||||||
>c:\users\alexsvk\documents\visual studio 2010\projects\api\schupak\ch1\listing_2\ listing_2\cwnd.h(20): warning C4200: nonstandard extension used : zero-sized array in struct/union 1> Cannot generate copy-ctor or copy-assignment operator when UDT contains a zero-sized array 1>c:\users\alexsvk\documents\visual studio 2010\projects\api\schupak\ch1\listing_2\ listing_2\cwnd.cpp(3): error C2761: 'const wchar_t cWnd::lpszClassName[]' : member function redeclaration not allowed т.е. инициализация не static полей вне объявления класса невозможна?
0
|
||||||
|
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
|
|||||||
| 12.05.2011, 23:24 [ТС] | |||||||
|
Хм...
1>c:\users\alexsvk\documents\visual studio 2010\projects\api\schupak\ch1\listing_2\ listing_2\cwnd.cpp(10): error C2439: 'cWnd::lpszClassName' : member could not be initialized 1> c:\users\alexsvk\documents\visual studio 2010\projects\api\schupak\ch1\listing_2\ listing_2\cwnd.h(20) : see declaration of 'cWnd::lpszClassName' 1> Hello2.cpp 1>c:\users\alexsvk\documents\visual studio 2010\projects\api\schupak\ch1\listing_2\ listing_2\cwnd.h(20): error C2864: 'cWnd::lpszClassName' : only static const integral data members can be initialized within a class 1> Generating Code... ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
0
|
|||||||
|
|
|
| 13.05.2011, 09:56 | |
|
В .h надо extern указывать. Без extern у тебя описание (declaration) превратилось в определение (definition). И именно про это место выдавалась ошибка из поста #24 (если внимательно посмотреть на привязку ошибки к исходнику)
0
|
|
|
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
|
|
| 13.05.2011, 11:49 [ТС] | |
|
0
|
|
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
| 13.05.2011, 11:54 | |
|
extern ни разу не аналог static - кто это вам сказал?
static - это прямое указание размещения переменной в static storage. А extern - это указание о том, что в данной единице трансляции переменная не определена. Это линкер найдет ее в другом модуле и "подклеит".
0
|
|
|
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
|
|
| 13.05.2011, 12:02 [ТС] | |
|
0
|
|
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|||
| 13.05.2011, 12:24 | |||
Во-первых, речь там идет о КОНСТАНТАХ. Во-вторых, static-переменные могут быть описаны не только в классе, но и в функции, и в пространстве имен, и даже просто в файле (deprecated по стандарту). И все они размещаются в static storage. А вот доступность-видимость их зависит от того, где они описаны. Если статическая переменная описана непосредственно в файле, то ее область видимости - этот файл (что и является устаревшим - вместо подобного подхода ввели пространства имен). Что касается констант, константа, описанная вне каких-либо конструкций на уровне файла, видна только в этом файле. Даже нестатическая. Чтобы ее видеть в другой единице трансляции - надо как раз и прописать extern.
0
|
|||
|
|
||
| 13.05.2011, 13:00 | ||
|
0
|
||
|
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
|
|
| 13.05.2011, 13:01 [ТС] | |
|
Добавил к коду extern в *.h
1>------ Build started: Project: Listing_2, Configuration: Debug Win32 ------ 1> cWnd.cpp 1>c:\users\alexsvk\documents\visual studio 2010\projects\api\schupak\ch1\listing_2\ listing_2\cwnd.h(20): error C2071: 'cWnd::lpszClassName' : illegal storage class 1>c:\users\alexsvk\documents\visual studio 2010\projects\api\schupak\ch1\listing_2\ listing_2\cwnd.h(20): warning C4200: nonstandard extension used : zero-sized array in struct/union 1> Cannot generate copy-ctor or copy-assignment operator when UDT contains a zero-sized array 1>c:\users\alexsvk\documents\visual studio 2010\projects\api\schupak\ch1\listing_2\ listing_2\cwnd.cpp(10): error C2439: 'cWnd::lpszClassName' : member could not be initialized 1> c:\users\alexsvk\documents\visual studio 2010\projects\api\schupak\ch1\listing_2\ listing_2\cwnd.h(20) : see declaration of 'cWnd::lpszClassName' 1> Hello2.cpp 1>c:\users\alexsvk\documents\visual studio 2010\projects\api\schupak\ch1\listing_2\ listing_2\cwnd.h(20): error C2071: 'cWnd::lpszClassName' : illegal storage class 1>c:\users\alexsvk\documents\visual studio 2010\projects\api\schupak\ch1\listing_2\ listing_2\cwnd.h(20): warning C4200: nonstandard extension used : zero-sized array in struct/union 1> Cannot generate copy-ctor or copy-assignment operator when UDT contains a zero-sized array 1> Generating Code... ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
0
|
|
|
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
|
||||||||||||||||
| 13.05.2011, 13:09 [ТС] | ||||||||||||||||
|
cWnd.h
То есть static - модификатор имеет следующие применения: 1. Как глобальная переменная, обращение к которой возможно из определённого блока (если в stdafx.h, то для всей программы; если в функции, то внутри этой ф-ции и т.д.), но при этом предыдущее значение сохраняется при каждом входе в этот блок. 2. Как следствие из 1-го, переменная static будет видна только в модуле, где она определена (т.е. имеется множество файлов, но переменная определена в файле f1.h, то только в этом файле к ней будет доступ открыт) 3. Как поле класса. Переменная глобальна, но видна только методам данного класса. Глобальность при этом подразумевает время жизни, равное времени жизни всей программы. Правильно ли выстроил понятие о static'e?
0
|
||||||||||||||||
|
|
||||
| 13.05.2011, 14:22 | ||||
|
1
|
||||
|
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
|
||
| 13.05.2011, 16:03 [ТС] | ||
|
Не по теме: Над аватарой прямое противоречие!:) Непросвещённые моменты:
1
|
||
|
|
||||||||
| 13.05.2011, 17:37 | ||||||||
|
"extern int x;" - переменная определена где-то в другом месте "int x;" - переменная определена в данном модуле, но видна из других модулей (если там написать extern) "static int x;" - переменная определена в данном модуле, но из других модулей недоступна, даже если в других модулях написать extern
1
|
||||||||
|
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
|
||
| 13.05.2011, 18:00 [ТС] | ||
|
На счёт класса, здесь используется static. Интерес же был на счёт использования const БЕЗ static.
0
|
||
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
||||||||||||||
| 13.05.2011, 18:34 | ||||||||||||||
|
На РСДН вас за подобные вольности съели бы с потрохами... ![]() Добавлено через 8 минут
Вот можно почитать из моей книжки:
0
|
||||||||||||||
| 13.05.2011, 18:34 | |
|
Инициализация константного статического объекта - члена класса Инициализация статического члена std::vector в шаблонном классе
Обнуление статического массива Из статического массива в динамический Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы
## О чём эта статья
В процессе построения ОДУ-модели (система дифференциальных. . .
|
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет)
Содержание проекта
Симуляция вековой (50 лет) экологической сукцессии в почве леса
Основные участники: АМ-гриб, ЭКМ-гриб,. . .
|
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов
Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
|
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация
В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
|
|
Сукцессия 20. Война автоботов. Делаем ставки. Лёд против "пш-пш!".
anaschu 11.07.2026
Битва ИИ в ризосфере: Как мы скрестили жесткие ОДУ, закон Фика и «подземный шантаж»
Уважаемые коллеги!
Хочу поделиться уникальным опытом ведения междисциплинарной компьютерной разработки. Прямо. . .
|
Сукцессия 19. Какие выводы я сделал из модели? Часть 2.Внутримикоризный стехиометрический буфер и хроно-дискретные зоны экспансии
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы
Математический аппарат моделирования
|
Сукцессия 18. Какие выводы я сделал из войны грибов с деревьями? Часть 1- рассказ и немного про термины
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы
Математический аппарат моделирования
Система ОДУ описывает динамику изменения массы различных компонентов системы во времени. Ключевой. . .
|
Просветление в 5 секунд
kumehtar 10.07.2026
Андрей Веретенников выдал фразу недавно: "Вам не обязательно кем-то себя считать"
|