|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
|||||||||||
Статический класс25.04.2024, 04:02. Показов 10185. Ответов 165
Метки нет (Все метки)
Всем привет
хочу создать полностью статический класс и создаю но возникают ошибки неопределенные reference и пр. хотелось бы сделать так
пишу в итоге так
при компиляции получаю ошибки необъявленные ссылки на var1, var2 .... undefined reference to `SomeClass::var1 вопрос как объявить статический метод класса, а в идеале и вообще весь класс, чтобы не создавать в коде его экземпляр? Добавлено через 4 минуты основная задача вынести этот статический класс в один файл то бишь в модуль не хедер + cpp а сразу все в одном как в шарпах - очень удобно это они придумали в шарпах
0
|
|||||||||||
| 25.04.2024, 04:02 | |
|
Ответы с готовыми решениями:
165
Дан класс, преобразуйте его в статический класс со статическими методами и продемонстрируйте работу с ним Статический класс Статический член указатель на класс |
|
фрилансер
6461 / 5667 / 1130
Регистрация: 11.10.2019
Сообщений: 15,083
|
|
| 13.05.2024, 14:52 | |
|
1
|
|
|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
|||
| 13.05.2024, 15:03 [ТС] | |||
|
но сейчас возникает куча вопросов по реализации стандарта
"Variables with static storage duration (3.7.1) or thread storage duration (3.7.2) shall be zero-initialized (8.5) before any other initialization takes place." это же для компилятора указание? программист же не будет сначала устанавливать в ноль , а потом в другое значение. он сразу полагает что там ноль, и ставит другое значение, но тогда вопрос - почему нельзя оставить ноль и не требовать динамической инициализации. Together, zero-initialization and constant initialization are called static initialization; all other initialization is dynamic initialization. Static initialization shall be performed before any dynamic initialization takes place. <...> почему нельзя было сделать нулевую - как они сделали, и сразу ее в константную. ну просто так получилось Добавлено через 2 минуты почему бы не пойти дальше и не упростить жизнь, добавив еще одну инициализацию по умолчанию. какой мне хрен с этой нулевой инициализации - если undefined reference. Т.е. просто так написано, исторически. можно академически развести демагогию, но понимать здесь нечего - реализовано как реализовано. я напрмиемр не вижу проблем чтобы сразу дать значение по умолчанию и не требовать явной или какой-то там динамической инициализации. Добавлено через 2 минуты )))вот в чем казус то )и обращался к ней в методе, не инициализировав дополнительно вручную. Добавлено через 2 минуты потому что это логично - она на то и статическая чтобы быть инициализированной сразу. в этом её и суть. но оказалось всё круче, оказалось можно одну статику инициализировать другой статикой. чего невозможно было бы реализовать если разрешить инициализировать статику внутри объявления класса. может именно поэтому
0
|
|||
|
фрилансер
6461 / 5667 / 1130
Регистрация: 11.10.2019
Сообщений: 15,083
|
||
| 13.05.2024, 15:03 | ||
![]() короче, едем по кругу, я чувствую
0
|
||
|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
||||||||||||
| 13.05.2024, 15:09 [ТС] | ||||||||||||
|
а где в
определения здесь нет, но вы пишете что переменная статическая всегда имеет инициализацию? вопрос где в коде
Добавлено через 56 секунд она ее здесь не имеет - потому что это объявление значит не всегда. но согласно стандарту - она ее будет иметь при компиляции в значение по умолчанию. но сейчас она ее не имеет
0
|
||||||||||||
|
фрилансер
6461 / 5667 / 1130
Регистрация: 11.10.2019
Сообщений: 15,083
|
||
| 13.05.2024, 15:10 | ||
|
pup_kin, смотри.
1) в коде могут быть объявления. Сколько угодно. Компилятору фиолетово.Если этими объектами никто не воспользовался, то ничего страшного не произошло. Наверное, даже линкер их проигнорирует (на данном этапе инициализации ещё не может быть, поскольку объекты только "на бумажке") 2) в коде могут быть определения или объявления сразу с определениями(тут для статических объектов нулевая принудительная инициализация либо указанная программистом. Для остальных объектов может не быть инициализации)
0
|
||
|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
||
| 13.05.2024, 15:11 [ТС] | ||
|
я так понял, вся этат баблалайцйка со статикой началась для того, чтобы можно было инициализировать одну статику другой статикой не особо заморачиваясь на порядок инклюдов.
Добавлено через 49 секунд и инициализации здесь нет значит не всегда она инициализирована, или всегда значит не всегда ? предлагаю забить, написано достаточно
0
|
||
|
фрилансер
6461 / 5667 / 1130
Регистрация: 11.10.2019
Сообщений: 15,083
|
|
| 13.05.2024, 15:12 | |
|
pup_kin, конечно же инициализация у статических объектов есть всегда
0
|
|
|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
||
| 13.05.2024, 15:12 [ТС] | ||
|
0
|
||
|
фрилансер
6461 / 5667 / 1130
Регистрация: 11.10.2019
Сообщений: 15,083
|
|
| 13.05.2024, 15:13 | |
|
0
|
|
|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
|||||||||||||
| 13.05.2024, 15:15 [ТС] | |||||||||||||
|
и в чем она выражается?
Добавлено через 35 секунд
0
|
|||||||||||||
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
|
| 13.05.2024, 15:15 | |
|
pup_kin
По-моему, вы не различаете 3 разных понятия: - объявление статического члена класса - определение статического члена класса -инициализация статического члена класса Это три разные части синтаксиса. И важно, что их именно 3, а не 2.
1
|
|
|
фрилансер
6461 / 5667 / 1130
Регистрация: 11.10.2019
Сообщений: 15,083
|
|||
| 13.05.2024, 15:16 | |||
0
|
|||
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
|
| 13.05.2024, 15:16 | |
|
И вообще
не почитать ли матчасть https://habr.com/ru/articles/527044/ Чтобы хотя бы в терминах не плавать
0
|
|
|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
||
| 13.05.2024, 15:18 [ТС] | ||
)Добавлено через 12 секунд объявление и определение Добавлено через 24 секунды чета от меня ускользнула какая-то важная деталь. надо осмыслить
0
|
||
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
|
| 13.05.2024, 15:18 | |
|
0
|
|
|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
|
| 13.05.2024, 15:22 [ТС] | |
|
а в чем отличие для переменной/ поля определения от инициализации?
Добавлено через 1 минуту если инициализацией называется процесс присваивания значения переменной/полю согласно определению в процессе компиляции, то это казуистика как по мне.
0
|
|
|
фрилансер
6461 / 5667 / 1130
Регистрация: 11.10.2019
Сообщений: 15,083
|
|
| 13.05.2024, 15:27 | |
|
pup_kin,объявление - это способ сказать, что где-то объект был "физически" построен. Линкер найдёт потом после компиляции, где именно. И все упоминания привяжет туда
определение - это способ сказать, где "физически" будет находиться в коде объект (образно выражаясь) инициализация - это самое первое заполнение байтиков внутри этого объекта (тоже образно)
0
|
|
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
|||||||
| 13.05.2024, 15:30 | |||||||
|
.cpp:
Определение обязано быть. (Разные краевые случаи неиспользуемых, но объявленных переменных, приведённые в теме, не рассматриваем, ибо практического смысла в них нет.) А вот инициализацию можно в программе не указывать, если она не требуется. Тогда по стандарту подразумевается {} (для int это 0)
0
|
|||||||
|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
|
| 13.05.2024, 15:32 [ТС] | |
|
ага
как я понял есть две базовые элемента объявление и определение. из них можно сделать третью инициализацию,если я верно понял объявление + определение равно инициализация. объявление int ф; определение ф =1; int ф=1; - инициализация, равная объявление + определение. я не вижу трех атомарных элементов ![]() может я ошибаюсь.
0
|
|
|
фрилансер
6461 / 5667 / 1130
Регистрация: 11.10.2019
Сообщений: 15,083
|
|
| 13.05.2024, 15:33 | |
|
0
|
|
| 13.05.2024, 15:33 | |
|
Помогаю со студенческими работами здесь
140
Не могу вызвать простой статический класс Статический полиморфизм. Базовый класс «прямоугольник» Нужно создать статический массив строк как статический массив указателей на строки. Условние ниже --> создать статический массив строк как статический массив указателей на строки, задание ниже --> Объясните человеческим языком мне чайнику что такое singleton, статический класс. Зачем они нужны. Что рекомендуете прочитать мне для начала Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|