|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
|||||||||||
Статический класс25.04.2024, 04:02. Показов 11434. Ответов 165
Метки нет (Все метки)
Всем привет
хочу создать полностью статический класс и создаю но возникают ошибки неопределенные reference и пр. хотелось бы сделать так
пишу в итоге так
при компиляции получаю ошибки необъявленные ссылки на var1, var2 .... undefined reference to `SomeClass::var1 вопрос как объявить статический метод класса, а в идеале и вообще весь класс, чтобы не создавать в коде его экземпляр? Добавлено через 4 минуты основная задача вынести этот статический класс в один файл то бишь в модуль не хедер + cpp а сразу все в одном как в шарпах - очень удобно это они придумали в шарпах
0
|
|||||||||||
| 25.04.2024, 04:02 | |
|
Ответы с готовыми решениями:
165
Дан класс, преобразуйте его в статический класс со статическими методами и продемонстрируйте работу с ним Статический класс Статический член указатель на класс |
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||||||||
| 25.04.2024, 19:43 | |||||||||
|
Добавлено через 2 минуты
0
|
|||||||||
|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
||
| 25.04.2024, 19:43 [ТС] | ||
|
а какой смысл tatic inline если это вариант не тот, и если оно и без inline работает. я вот вообще не понял причем здесь inline. вопрос простой - можно ли без нейм спейс реализовать ? если можно - буду тестировать inline если нет - то какой смысл писать inline -если все равно не то.
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||||||||||||||
| 25.04.2024, 19:54 | |||||||||||||||
|
Без inline у вас "undefined reference to `SomeClass::var1" Добавлено через 1 минуту Добавлено через 7 минут pup_kin, https://wandbox.org/permlink/FRTcumqTXRHBT1ZD C inline все работает. Кликните здесь для просмотра всего текста
Убираю inline Кликните здесь для просмотра всего текста
Получаем ошибки линковки: https://wandbox.org/permlink/xVziDy2x03yfk7Li Нагляднее некуда. Пробуйте.
1
|
|||||||||||||||
|
фрилансер
6504 / 5749 / 1134
Регистрация: 11.10.2019
Сообщений: 15,394
|
|
| 25.04.2024, 20:08 | |
|
0
|
|
|
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
|
|
| 25.04.2024, 20:13 | |
|
Алексей1153, там просто у ТС хотелка такая, что бы обьект нельзя было создать
(во вс. случае, я понял так)Вообще наверное, стоило бы ему упомянуть про синглтон, но походу рановато еще...
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|
| 25.04.2024, 20:16 | |
|
0
|
|
|
фрилансер
6504 / 5749 / 1134
Регистрация: 11.10.2019
Сообщений: 15,394
|
|
| 25.04.2024, 20:17 | |
|
sdf45, если он и создаст объект, от этого ничего не произойдёт, ведь все элементы статические
0
|
|
|
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
|
||||
| 25.04.2024, 20:21 | ||||
холиварщик? почему? ![]() Вот почему я так предположил:
0
|
||||
|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
||||||
| 25.04.2024, 20:22 [ТС] | ||||||
я то проверял на 14 стандарте на 17 м все работает спасибо удивительно и в ардуине оно работает. всем спасибо но если в ардуине inline убрать то оно ругается не так как в визуал студио и вообще ошибку не понять занятно. ругается на SD card ^)
0
|
||||||
|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
||||||
| 26.04.2024, 02:47 [ТС] | ||||||
|
почитал так
осмыслил и возникает вопрос почему для полей нужен inline для того чтобы объявить их статическими, а для метода не нужен. ведь и метод и поле имеют адрес и тип возвращаемого значения. поигрался
Вопрос "inline" который у метода - это будет тот же самый inline который у поля, или здесь будет подстановка кода в вызываемое место? как вообще inline стало влиять на one definition rule? что происходит если просто пишу static - каким образом не происходит определение полей, ведь они же заданы но при этом ругается на undefined reference какой смысл имеет определение static int var5;// например? обратиться к var5 как к статическому полю я не могу, обратиться из экземпляра класса - тоже не могу. А какой тогда его смысл без inline? или это все заиграет когда будет хедер+ cpp и/или внешние определения?
0
|
||||||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||||||||||||||||
| 26.04.2024, 08:39 | |||||||||||||||||
|
Определение для такого объявления должно быть вне класса, по тому же принципу, что и аналогичный код для функции.
Добавлено через 6 минут Статическое поле обязано иметь определение. Функции могут иметь его по месту, прямо в теле класса и тогда это определение будет считаться inline. Переменные в прежних версиях языка могли быть определены только вне класса (как я показывал выше). Относительно недавно добавили возможность определить переменную прямо в теле класса с ключевым словом inline. Таким образом статическим переменным и функциям не обязательно быть inline. Им всего лишь нужно определение. А вот каким образом вы это определение предоставите, уже зависит от использование или неиспользования inline. Если нужно его (определение) предоставить в теле класса, или просто сделать доступным в заголовочном файле, то inline нужно будет использовать обязательно.
1
|
|||||||||||||||||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||||
| 26.04.2024, 15:36 | ||||
|
0
|
||||
|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
|||||||||||||||||
| 26.04.2024, 17:43 [ТС] | |||||||||||||||||
|
полностью и ТОЛЬКО статический класс - лишен смысла, он превращается в недо namespace. это я неверно выразился - потому что стояла задача именно в необходимости статичных методов - потом это конечно вынесется в отдельный файл, и чтобы все было в одном файле и в одном классе - как в модуле, модули в 1С есть про модули с++ не знал.DrOffset ну конечно я имею ввиду объявление , когда речь идет про поля. но изначально когда писал, а потом стер "= занчениеПрисваивания", сейчас работает в том числе и константными полями
а вот вопрос директивы
для чего потребовалось использовать также и inline. хронология возникновения и в целом проблемы решаемые не ясны.
0
|
|||||||||||||||||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 26.04.2024, 18:13 | |||
|
Если единицы трансляции разные, то они не помогут ничем. Помните про принцип раздельной компиляции. Добавлено через 35 секунд Добавлено через 3 минуты pup_kin, https://youtu.be/G_jcBrrYPAs?t=89
1
|
|||
|
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
|
||||||||||||||||||||||
| 26.04.2024, 18:16 | ||||||||||||||||||||||
|
Например у вас есть заголовочный файл:
Это значит, что компилятор будет по отдельности компилировать main.cpp и bar.cpp И когда он скомпилирует, например файл main.cpp, то он скомпилирует функцию void foo(){}А потом он скомпилирует файл bar.cpp, и тоже скомпилирует функцию void foo(){}Получится, что функция void foo(){} была скомпилирована дважды.И когда потом линкер будет собирать все объектные файлы воедино, он выдаст ошибку о том, что функция foo имеет несколько определений. По правилам языка такого быть не должно, поэтому линкер сгенерирует ошибку. Однако, если вы пометите функцию как встраиваемую:
В этом случае линкер просто удалит лишние дубли, оставив только одну какую то версию.
2
|
||||||||||||||||||||||
|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
|
| 26.04.2024, 18:19 [ТС] | |
|
кажется понимаю.
а как это реализовано. это компиляторы научились как-то сохранять данные куда-то в кеш при работе с несколькими единицами трансляции. занятно , надо почитать кстати читаю про модули с ++ https://en.cppreference.com/w/cpp/language/modules и тут написано модули ортогональны пространствам имен как это понять ?ортогональный тип. я так понимаю что в данном случае имеется ввиду сто модули с++ родственны пространствам имен. Добавлено через 1 минуту а если компиляция раздельная, то как раньше существовали без inline ?
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||||
| 26.04.2024, 18:46 | ||||
|
Определение переменной размещалось в cpp и все. Видео посмотрите. Добавлено через 2 минуты Добавлено через 20 минут На примере GCC: https://en.wikipedia.org/wiki/Weak_symbol
1
|
||||
|
"C with Classes"
|
|
| 26.04.2024, 20:22 | |
|
DrOffset, к стати в VS17 есть известная проблема с static inline std::map, которая неплохо мне мозг поела когда то.
0
|
|
|
Нарушитель
6334 / 3067 / 1054
Регистрация: 01.06.2021
Сообщений: 11,728
|
|||||||||||||||||||||
| 26.04.2024, 20:34 | |||||||||||||||||||||
|
eva2326, DrOffset, это всё хорошо. Что делает inline всем понятно.
Но почему не написать?
0
|
|||||||||||||||||||||
|
"C with Classes"
|
||
| 26.04.2024, 20:44 | ||
|
0
|
||
| 26.04.2024, 20:44 | |
|
Не могу вызвать простой статический класс Статический полиморфизм. Базовый класс «прямоугольник» Нужно создать статический массив строк как статический массив указателей на строки. Условние ниже --> создать статический массив строк как статический массив указателей на строки, задание ниже --> Объясните человеческим языком мне чайнику что такое singleton, статический класс. Зачем они нужны. Что рекомендуете прочитать мне для начала Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|