|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
|||||||||||
Статический класс25.04.2024, 04:02. Показов 10818. Ответов 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,289
|
|
| 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,289
|
|
| 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 / 3037 / 1054
Регистрация: 01.06.2021
Сообщений: 11,569
|
|||||||||||||||||||||
| 26.04.2024, 20:34 | |||||||||||||||||||||
|
eva2326, DrOffset, это всё хорошо. Что делает inline всем понятно.
Но почему не написать?
0
|
|||||||||||||||||||||
|
"C with Classes"
|
||
| 26.04.2024, 20:44 | ||
|
0
|
||
| 26.04.2024, 20:44 | |
|
Не могу вызвать простой статический класс Статический полиморфизм. Базовый класс «прямоугольник» Нужно создать статический массив строк как статический массив указателей на строки. Условние ниже --> создать статический массив строк как статический массив указателей на строки, задание ниже --> Объясните человеческим языком мне чайнику что такое singleton, статический класс. Зачем они нужны. Что рекомендуете прочитать мне для начала Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 30. Фосфорный и азотный замки по "честному" закону лимитирования Либиха
anaschu 16.07.2026
Основные достижения за последние дни
1. Механизм отложенного высвобождения фосфора
Добавлен специальный пул для медленного разложения меланизированных гиф ЕСМ
Реализована разная скорость. . .
|
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2.
Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
|
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её.
Всё это стресс конечно. Почему?. . .
|
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот.
Ларри Уингет
|
|
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
|
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров
В текущей версии модели успешно реализован ключевой механизм. . .
|
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям
Реализованные компоненты:
Механизм закисления почвы через протонную помпу
Конкуренция между типами микориз
pH как триггер сукцессии
C/ P соотношение. . .
|
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
|