Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.60/42: Рейтинг темы: голосов - 42, средняя оценка - 4.60
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510

Статический класс

25.04.2024, 04:02. Показов 10800. Ответов 165
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет
хочу создать полностью статический класс и создаю
но возникают ошибки неопределенные reference и пр.

хотелось бы сделать так
C#
1
2
3
4
5
6
7
static class SomeClass{
 
 
public int var1{}, var2{}, var3{};
......
 
}
но в с++ ругается на static перед словом класс
пишу в итоге так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class SomeClass{
 
SomeClass(){};
public:
 
static float var1{}, var2{}, varN{}; 
static float somethingMethod(){
//тут использую переменные var1, var2....
};
 
//static float var1{}, var2{}, varN{}; // без разницы   где объявляю переменные выше или ниже метода,  ругается не необъявленные переменные
 
 
 
}
 
 
//
 
вызываю так 
SomeClass::somethingMethod();

при компиляции получаю ошибки
необъявленные ссылки на var1, var2 ....

undefined reference to `SomeClass::var1


вопрос
как объявить статический метод класса, а в идеале и вообще весь класс, чтобы не создавать в коде его экземпляр?

Добавлено через 4 минуты
основная задача вынести этот статический класс в один файл то бишь в модуль не хедер + cpp а сразу все
в одном как в шарпах - очень удобно это они придумали в шарпах
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.04.2024, 04:02
Ответы с готовыми решениями:

Дан класс, преобразуйте его в статический класс со статическими методами и продемонстрируйте работу с ним
Дан класс, преобразуйте его в статический класс со статическими методами и продемонстрируйте работу с ним.

Статический класс
Здравствуйте, а я правильно понимаю что статический класс - это класс у которого все методы статические? Добавлено через 57 секунд ...

Статический член указатель на класс
Доброго времени суток. Что требовалось: создать статический указатель на класс CPerson, чтобы сохранить в него нужный объект. Как пытался...

165
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
13.05.2024, 17:45  [ТС]
Студворк — интернет-сервис помощи студентам
test
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
13.05.2024, 17:46
Цитата Сообщение от pup_kin Посмотреть сообщение
а что в данном случае будет объявление ?
Если это не статическая переменная класса (например глобальная или локальная в функции), то это будет объявление + определение.
Если статическая класса, то для того, чтобы эта запись считалась определением, нужно дописать inline, иначе это только объявление (ну и дальше по тексту начиная с третьей страницы темы).
1
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
13.05.2024, 17:50  [ТС]
тем не менее
из всей темы - непонятен вывод, кроме того
что
так принято. и не более того.
так написаны компиляторы.
и нет других оснований.
я вижу это так.

не считая inline

Добавлено через 2 минуты
т.е. есть некое поведение, исторически сложившееся,
мне вообще без разницы объявление оно или определение.
Факт то, что с помощью одной статики можно определить другую статику и компилятор это хавает, не заставляя сидеть в куче хедеров инклюдить их по очереди.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
13.05.2024, 17:57
pup_kin, Вывод из всей темы в том, что нужно читать книги, и задавать конкретные вопросы по прочитанному, а не пытаться выучить язык на форуме

У вас эта тема уже 30 раз правила форума нарушила. Потому что у вас в ней не один вопрос, а целый пласт знаний, сопоставимый с книгой поднимается. Так нельзя. Во-первых вы ничего не усвоите, потому что как бы мы не старались, особенно с таким разрывом по времени как вы тут появляетесь, системно изложить информацию не получится. Во-вторых, для изучения необходимо очистить разум и не делать поспешных выводов, а вы сейчас уже как будто бы решили, что все уже поняли, хотя до этого еще как до Луны.
1
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
13.05.2024, 19:15
Цитата Сообщение от pup_kin Посмотреть сообщение
так принято. и не более того.
так написаны компиляторы.
Никакого "исторически сложилось" здесь нет.

Это продуманный и умышленно спроектированный именно так дизайн языка, продиктованный типичным разделением процессов компиляции и линковки.
Как вы (надеюсь) знаете, в С++ (как и в большинстве видимо компилируемых языков) "перевод" исходного текста в исполняемый файл выполняется в 2 этапа:
- компиляция (из набора .h и .cpp получаем набор .obj)
- линковка (из набора .obj и .lib получаем .exe)

Такое разделение позволяет ускорять процесс получения исполняемого файла (.exe) в случае кучи .cpp в проекте.
Если в проекте 100 .cpp-файлов и изменился только один, то достаточно только его один перекомпилировать, а далее из ста уже имеющихся .obj собрать .exe. Что, конечно, быстрее, чем перекомпилировать все 100 файлов .cpp при повторных компиляциях.

И именно для того, чтобы линковщик мог разрешить все ссылки на переменные и функции ("разрешить" здесь не в смысле "разрешить/запретить", а в смысле определить их адреса по именам) и придумана вся эта схема с - объявлением и определением статических переменных и статических членов класса.

Так что никаких "исторически сложившихся традиций" тут нет. Сугубо техническая архитектура и техническая необходимость. Которая никуда не исчезла и не исчезнет.
Ну разве что её подсластят и сделают немного более удобной при помощи inline в современных версиях.

PS
Хотя как синтаксически сделано объявление статических переменных в новомодных компилируемых языках я что-то не вникал...
1
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
14.05.2024, 10:17
Цитата Сообщение от pup_kin Посмотреть сообщение
и интерпретируется в инструкции характерные для текущей архитектуры
Разные уровни абстракции.

Добавлено через 1 минуту
Наказывайте уже Волгу за чистку всего чего не попадя....
Это жесть просто.

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от KSergey9 Посмотреть сообщение
Как вы (надеюсь) знаете, в С++
Он ОдинЕсник, что он может знать ? )))

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.05.2024, 10:17

Не могу вызвать простой статический класс
Вот такой код получился (VS2017): #pragma once #include <iostream> #include <string> static class Func { ...

Статический полиморфизм. Базовый класс «прямоугольник»
Здравствуйте, дорогие участники форума! Помогите, пожалуйста! Необходимо реализовать статический полиморфизм. Нужно вызвать с помощью...

Нужно создать статический массив строк как статический массив указателей на строки. Условние ниже -->
Слова английского текста рассортировать по возрастанию количества заданной буквы в слове. Слова с одинаковым количеством такой буквы...

создать статический массив строк как статический массив указателей на строки, задание ниже -->
Слова английского текста, начинающиеся с гласных букв, рассортировать в алфавитном порядке по первой согласной букве слова. Остальные слова...

Объясните человеческим языком мне чайнику что такое singleton, статический класс. Зачем они нужны. Что рекомендуете прочитать мне для начала
Объясните человеческим языком мне чайнику что такое singleton, статический класс. Зачем они нужны. Что рекомендуете прочитать мне для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
166
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru