|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
|||||||||||
Статический класс25.04.2024, 04:02. Показов 10744. Ответов 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
|
|||||||||||||||
|
фрилансер
6495 / 5724 / 1133
Регистрация: 11.10.2019
Сообщений: 15,286
|
|
| 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
|
|
|
фрилансер
6495 / 5724 / 1133
Регистрация: 11.10.2019
Сообщений: 15,286
|
|
| 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
|
|
|
6312 / 3035 / 1053
Регистрация: 01.06.2021
Сообщений: 11,526
|
|||||||||||||||||||||
| 26.04.2024, 20:34 | |||||||||||||||||||||
|
eva2326, DrOffset, это всё хорошо. Что делает inline всем понятно.
Но почему не написать?
0
|
|||||||||||||||||||||
|
"C with Classes"
|
||
| 26.04.2024, 20:44 | ||
|
0
|
||
| 26.04.2024, 20:44 | |
|
Не могу вызвать простой статический класс Статический полиморфизм. Базовый класс «прямоугольник» Нужно создать статический массив строк как статический массив указателей на строки. Условние ниже --> создать статический массив строк как статический массив указателей на строки, задание ниже --> Объясните человеческим языком мне чайнику что такое singleton, статический класс. Зачем они нужны. Что рекомендуете прочитать мне для начала Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
|
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
|
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал.
Оно само - говорит.
Кто слышит тот слышит.
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|