|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
|||||||||||
Статический класс25.04.2024, 04:02. Показов 10996. Ответов 165
Метки нет (Все метки)
Всем привет
хочу создать полностью статический класс и создаю но возникают ошибки неопределенные reference и пр. хотелось бы сделать так
пишу в итоге так
при компиляции получаю ошибки необъявленные ссылки на var1, var2 .... undefined reference to `SomeClass::var1 вопрос как объявить статический метод класса, а в идеале и вообще весь класс, чтобы не создавать в коде его экземпляр? Добавлено через 4 минуты основная задача вынести этот статический класс в один файл то бишь в модуль не хедер + cpp а сразу все в одном как в шарпах - очень удобно это они придумали в шарпах
0
|
|||||||||||
| 25.04.2024, 04:02 | |
|
Ответы с готовыми решениями:
165
Дан класс, преобразуйте его в статический класс со статическими методами и продемонстрируйте работу с ним Статический класс Статический член указатель на класс |
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|||||||||
| 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
|
||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|||||||||||||||
| 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
|
|||||||||||||||
|
фрилансер
6498 / 5729 / 1133
Регистрация: 11.10.2019
Сообщений: 15,300
|
|
| 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
|
|
|
фрилансер
6498 / 5729 / 1133
Регистрация: 11.10.2019
Сообщений: 15,300
|
|
| 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
|
||||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|||||||||||||||||
| 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
|
|||||||||||||||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|||
| 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
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||||
| 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
|
|
|
Нарушитель
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
|
|||||||||||||||||||||
| 26.04.2024, 20:34 | |||||||||||||||||||||
|
eva2326, DrOffset, это всё хорошо. Что делает inline всем понятно.
Но почему не написать?
0
|
|||||||||||||||||||||
|
"C with Classes"
|
||
| 26.04.2024, 20:44 | ||
|
0
|
||
| 26.04.2024, 20:44 | |
|
Не могу вызвать простой статический класс Статический полиморфизм. Базовый класс «прямоугольник» Нужно создать статический массив строк как статический массив указателей на строки. Условние ниже --> создать статический массив строк как статический массив указателей на строки, задание ниже --> Объясните человеческим языком мне чайнику что такое singleton, статический класс. Зачем они нужны. Что рекомендуете прочитать мне для начала Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов.
Логика кажется понятной:
1. Находим ключевые слова.
2. Добавляем их на. . .
|
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302
Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
|