|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
|||||||||||
Статический класс25.04.2024, 04:02. Показов 10202. Ответов 165
Метки нет (Все метки)
Всем привет
хочу создать полностью статический класс и создаю но возникают ошибки неопределенные reference и пр. хотелось бы сделать так
пишу в итоге так
при компиляции получаю ошибки необъявленные ссылки на var1, var2 .... undefined reference to `SomeClass::var1 вопрос как объявить статический метод класса, а в идеале и вообще весь класс, чтобы не создавать в коде его экземпляр? Добавлено через 4 минуты основная задача вынести этот статический класс в один файл то бишь в модуль не хедер + cpp а сразу все в одном как в шарпах - очень удобно это они придумали в шарпах
0
|
|||||||||||
| 25.04.2024, 04:02 | |
|
Ответы с готовыми решениями:
165
Дан класс, преобразуйте его в статический класс со статическими методами и продемонстрируйте работу с ним Статический класс Статический член указатель на класс |
|
фрилансер
6465 / 5678 / 1131
Регистрация: 11.10.2019
Сообщений: 15,118
|
|
| 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
|
|||
|
фрилансер
6465 / 5678 / 1131
Регистрация: 11.10.2019
Сообщений: 15,118
|
||
| 13.05.2024, 15:03 | ||
![]() короче, едем по кругу, я чувствую
0
|
||
|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
||||||||||||
| 13.05.2024, 15:09 [ТС] | ||||||||||||
|
а где в
определения здесь нет, но вы пишете что переменная статическая всегда имеет инициализацию? вопрос где в коде
Добавлено через 56 секунд она ее здесь не имеет - потому что это объявление значит не всегда. но согласно стандарту - она ее будет иметь при компиляции в значение по умолчанию. но сейчас она ее не имеет
0
|
||||||||||||
|
фрилансер
6465 / 5678 / 1131
Регистрация: 11.10.2019
Сообщений: 15,118
|
||
| 13.05.2024, 15:10 | ||
|
pup_kin, смотри.
1) в коде могут быть объявления. Сколько угодно. Компилятору фиолетово.Если этими объектами никто не воспользовался, то ничего страшного не произошло. Наверное, даже линкер их проигнорирует (на данном этапе инициализации ещё не может быть, поскольку объекты только "на бумажке") 2) в коде могут быть определения или объявления сразу с определениями(тут для статических объектов нулевая принудительная инициализация либо указанная программистом. Для остальных объектов может не быть инициализации)
0
|
||
|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
||
| 13.05.2024, 15:11 [ТС] | ||
|
я так понял, вся этат баблалайцйка со статикой началась для того, чтобы можно было инициализировать одну статику другой статикой не особо заморачиваясь на порядок инклюдов.
Добавлено через 49 секунд и инициализации здесь нет значит не всегда она инициализирована, или всегда значит не всегда ? предлагаю забить, написано достаточно
0
|
||
|
фрилансер
6465 / 5678 / 1131
Регистрация: 11.10.2019
Сообщений: 15,118
|
|
| 13.05.2024, 15:12 | |
|
pup_kin, конечно же инициализация у статических объектов есть всегда
0
|
|
|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
||
| 13.05.2024, 15:12 [ТС] | ||
|
0
|
||
|
фрилансер
6465 / 5678 / 1131
Регистрация: 11.10.2019
Сообщений: 15,118
|
|
| 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
|
|
|
фрилансер
6465 / 5678 / 1131
Регистрация: 11.10.2019
Сообщений: 15,118
|
|||
| 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
|
|
|
фрилансер
6465 / 5678 / 1131
Регистрация: 11.10.2019
Сообщений: 15,118
|
|
| 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
|
|
|
фрилансер
6465 / 5678 / 1131
Регистрация: 11.10.2019
Сообщений: 15,118
|
|
| 13.05.2024, 15:33 | |
|
0
|
|
| 13.05.2024, 15:33 | |
|
Помогаю со студенческими работами здесь
140
Не могу вызвать простой статический класс Статический полиморфизм. Базовый класс «прямоугольник» Нужно создать статический массив строк как статический массив указателей на строки. Условние ниже --> создать статический массив строк как статический массив указателей на строки, задание ниже --> Объясните человеческим языком мне чайнику что такое singleton, статический класс. Зачем они нужны. Что рекомендуете прочитать мне для начала Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|