|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
|||||||||||
Статический класс25.04.2024, 04:02. Показов 10926. Ответов 165
Метки нет (Все метки)
Всем привет
хочу создать полностью статический класс и создаю но возникают ошибки неопределенные reference и пр. хотелось бы сделать так
пишу в итоге так
при компиляции получаю ошибки необъявленные ссылки на var1, var2 .... undefined reference to `SomeClass::var1 вопрос как объявить статический метод класса, а в идеале и вообще весь класс, чтобы не создавать в коде его экземпляр? Добавлено через 4 минуты основная задача вынести этот статический класс в один файл то бишь в модуль не хедер + cpp а сразу все в одном как в шарпах - очень удобно это они придумали в шарпах
0
|
|||||||||||
| 25.04.2024, 04:02 | |
|
Ответы с готовыми решениями:
165
Дан класс, преобразуйте его в статический класс со статическими методами и продемонстрируйте работу с ним Статический класс Статический член указатель на класс |
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||||||||
| 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
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||||||||||||||
| 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
|
|||||||||||||||
|
фрилансер
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,294
|
|
| 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
|
|
|
фрилансер
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,294
|
|
| 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
|
||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||||||||||||||||
| 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
|
|||||||||||||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 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
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||
| 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
|
|
|
6315 / 3039 / 1055
Регистрация: 01.06.2021
Сообщений: 11,587
|
|||||||||||||||||||||
| 26.04.2024, 20:34 | |||||||||||||||||||||
|
eva2326, DrOffset, это всё хорошо. Что делает inline всем понятно.
Но почему не написать?
0
|
|||||||||||||||||||||
|
"C with Classes"
|
||
| 26.04.2024, 20:44 | ||
|
0
|
||
| 26.04.2024, 20:44 | |
|
Не могу вызвать простой статический класс Статический полиморфизм. Базовый класс «прямоугольник» Нужно создать статический массив строк как статический массив указателей на строки. Условние ниже --> создать статический массив строк как статический массив указателей на строки, задание ниже --> Объясните человеческим языком мне чайнику что такое singleton, статический класс. Зачем они нужны. Что рекомендуете прочитать мне для начала Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр.
Дословно, отклонённая. . .
|
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы
Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
|
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
|
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2.
Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
|
|
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
|
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
|
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
|
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
|