Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.65/34: Рейтинг темы: голосов - 34, средняя оценка - 4.65
Заблокирован

Почему нельзя объявить в описание класса статический double?

02.10.2014, 16:19. Показов 6891. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ближе к делу
C++
1
2
3
4
5
6
7
8
class SuperClass
{
public:
    SuperClass() {}
 
    static const int A = 0;
    static const double B = 0; //ERROR*
};
ERROR*:
error C2864: 'SuperClass::B' : a static data member with an in-class initializer must have non-volatile const integral type
Собственно почему? Я не очень понял выпендрёжа компилятора по поводу volatile ...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.10.2014, 16:19
Ответы с готовыми решениями:

Вызов метода из другого класса, при этом нельзя создать объект второго класса и метод не статический
У меня есть 2 класса - один с формой и кнопкой на ней и другой класс, у которого есть метод void Method() Необходимо при нажатии на...

Как объявить статический метод класса?
выдает ошибку на 11 16 19 строку((((((( #include <iostream> using namespace std; class Sop { private: short int kol; ...

Почему нельзя объявить динамический массив глобально
вот код #include <iostream> #include <string> int w = 0; string *s = new string ; using namespace std; int main { ...

25
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
02.10.2014, 18:19
Студворк — интернет-сервис помощи студентам
Scrooge McDuck, читаем про constexpr
its type must be a LiteralType
Добавлено через 2 минуты
Компилятор должен поддерживать С++11.
1
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.10.2014, 18:22
Цитата Сообщение от Scrooge McDuck Посмотреть сообщение
нет, ну не объяснение конечно же, но может хоть утверждение или декларация (или на самом деле, почему) того, что только Int и enum может объявляться статический в объявление класса с присваиванием значением, а другие переменные - нет
В стандарте есть, это точно (не в С++11, там, насколько знаю, все поля в объявлении класса можно инициализировать), лень искать.
1
Заблокирован
02.10.2014, 18:24  [ТС]
Ладно, проехали
Всем спасибо
0
Pied Piper
 Аватар для ArmanPrestige
237 / 228 / 57
Регистрация: 15.01.2013
Сообщений: 855
02.10.2014, 18:33
Цитата Сообщение от alsav22 Посмотреть сообщение
В стандарте есть, это точно (не в С++11, там, насколько знаю, все поля в объявлении класса можно инициализировать), лень искать.
Подтверждаю. Компилятор который в 2012 студии меня посылал - не полностью еще стандарт поддерживается. А вот gcc 4.8.1 - все прекрасно работает.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.10.2014, 18:45
Лучший ответ Сообщение было отмечено Scrooge McDuck как решение

Решение

Scrooge McDuck, вот: 9.4.2 4 (C++98):
If a static data member is of const integral or const enumeration type, its declaration in the class
definition can specify a constant-initializer which shall be an integral constant expression (5.19). In that
case, the member can appear in integral constant expressions. The member shall still be defined in a namespace
scope if it is used in the program and the namespace scope definition shall not contain an initializer.
1
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
02.10.2014, 19:46
Лучший ответ Сообщение было отмечено Scrooge McDuck как решение

Решение

Цитата Сообщение от Scrooge McDuck Посмотреть сообщение
Эти члены доступны только через класс - SuperClass::A, они не глобальные
Они не глобальные, но имеют static storage duration, а значит инициализируются в начале работы программы, а уничтожаются в конце. Точно так же себя ведут глобальные переменные, потому что они тоже имеют static storage duration. Он скорее всего именно это имел в виду.

Цитата Сообщение от Scrooge McDuck Посмотреть сообщение
Ну понятно, это я и так знал, просто хотелось узнать, почему только Int и перечисление? Чем double хуже Int ?
Сайт Бьярне:
A class is typically declared in a header file and a header file is typically included into many translation units. However, to avoid complicated linker rules, C++ requires that every object has a unique definition. That rule would be broken if C++ allowed in-class definition of entities that needed to be stored in memory as objects.
Этот текст написан уже давно, теперь constexpr решает эту проблему путем разделения кода выполняемого на этапе компиляции, и кода работающего на этапе исполнения. Раньше такого разделения не было. Очевидно, что для кода этапа компиляции нет необходимости иметь definition, поэтому выделенное выше не противоречит подходу с constexpr.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.10.2014, 19:46

Почему нельзя объявить указатель на шаблонную структуру?
template <class T> typedef struct per { T znach; int kol_vo_povt; }* p; int main() { per<int> k; }

Почему нельзя объявить интерфейс во внутреннем классе?
Почему нельзя объявить интерфейс во внутреннем классе? Здесь написано: Я не понимаю, почему будет добавлен модификатор static?

Почему нельзя так объявить двумерный массив?
Ошибка возникает если для массива tempArray при объявлении(и одновременной инициализации) использовать переменную(size) которую принимает...

Составить описание класса "3D вектор". Объявить объекты класса и продемонстрировать работу методов
Возникли сложности при решении задачи. Буду признателен тем, кто поможет. Задание: Составить описание класса. Объявить объекты класса...

Почему нельзя делить с остатком float/double
Доброго времени суток, объясните мне, почему нельзя делить с остатком числа с точкой? К примеру 5.5 / 2 = 1.5, разве нет? Проверим,...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
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
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru