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

Константы в классе

12.02.2019, 23:06. Показов 3006. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь решить следующую задачу из книги: Создать класс cls, который бы в качестве одного из значений содержал константу COUNT. Объявить два объекта класса cls. Поле COUNT первого объекта fst должно иметь значение 100, а поле COUNT второго объекта snd - значение 200.
В ответах идёт след. код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
class cls
{
public:
    const int COUNT;
    cls::cls(int val) : COUNT(val) {}
};
 
int main()
{
    cls fst(100), snd(200);
 
    cout << "fst.COUNT: " << fst.COUNT << "\n";
    cout << "snd.COUNT: " << snd.COUNT << "\n";
 
    system("pause");
    return 0;
}
В 8-ой строке компилятор выдаёт ошибку: "использование полного имени в объявлении члена не допускается".
Подскажите, пожалуйста, как исправить программу.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.02.2019, 23:06
Ответы с готовыми решениями:

Объявление константы в классе
Мне надо сделать класс в отдельном файле, я не использую main и не могу инициализировать константу вне класса, но мне надо ее использовать...

Объявление константы и массива в классе
Задача: 1. объявить константу в созданном классе и сделать ее видимой для всех методов данного класса; 2. объявить массив, размер...

Инициализация статической константы в классе
собственно сабж как это сделать если константа имеет тип класса? (не интегральная) т.е. надо вызвать у нее конструктор с определенным...

10
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
12.02.2019, 23:13
Лучший ответ Сообщение было отмечено Fossil121 как решение

Решение

Цитата Сообщение от Fossil121 Посмотреть сообщение
cls::cls(int val) : COUNT(val) {}
C++
1
cls(int val) : COUNT(val) {}
1
0 / 0 / 1
Регистрация: 29.06.2016
Сообщений: 110
12.02.2019, 23:18  [ТС]
nonedark2008, а почему так, не подскажете?
0
Just Do It!
 Аватар для XLAT
4206 / 2663 / 655
Регистрация: 23.09.2014
Сообщений: 9,061
Записей в блоге: 3
12.02.2019, 23:32
Цитата Сообщение от Fossil121 Посмотреть сообщение
Константы в классе
я пишу так:
C++
1
2
3
4
5
6
class cls
{
public:
    static const int COUNT = 111;
    cls(int val){}
};
насколько это может быть религиозно неправильным?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
12.02.2019, 23:42
XLAT, что за бред! Зачем тут статик, если значение задаётся для каждого объекта своё?
1
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
13.02.2019, 00:14
Цитата Сообщение от Fossil121 Посмотреть сообщение
а почему так, не подскажете?
Просто по стандарту нельзя таким образом объявлять методы. Однако некоторые компиляторы допускают такой синтаксис.

Добавлено через 15 минут
Вот вроде бы подходящая цитата из стандарта (11.3 [dcl.meaning]):
When the declarator-id is qualified, the declaration shall refer to a previously declared member of the class or namespace to which the qualifier refers
Т.е. полное имя используется только для обращения к уже ранее объявленному методу, ну и соответственно объявлять метод при помощи его полного имени нельзя.
2
1 / 1 / 0
Регистрация: 12.02.2019
Сообщений: 8
13.02.2019, 02:12
Цитата Сообщение от Fossil121 Посмотреть сообщение
а почему так, не подскажете?
Т.е. да, такое обращение имело бы место быть, например, если определение тела было вынесено за пределы класса
0
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
13.02.2019, 12:18
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Однако некоторые компиляторы допускают такой синтаксис.
Точно? Не нашел такой информации
0
 Аватар для Джон Кофи
266 / 81 / 18
Регистрация: 05.04.2018
Сообщений: 1,102
Записей в блоге: 1
13.02.2019, 12:28
Цитата Сообщение от n1b1ru Посмотреть сообщение
Точно? Не нашел такой информации
читал, что не допускается такое, возможно, nonedark2008 ошибся.
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
13.02.2019, 13:42
Цитата Сообщение от n1b1ru Посмотреть сообщение
Точно? Не нашел такой информации
Например в Visual Studio 2010/2015 вполне компилируется такой вариант:
C++
1
2
3
4
class A {
    void A::Test() {
    }
};
А вот в 2017 уже выдает ошибку.
2
13.02.2019, 14:07

Не по теме:

Так и есть...
gcc и clang на rextester выдали ошибку, а VS схавал

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.02.2019, 14:07
Помогаю со студенческими работами здесь

константы в классе
вот пример кода const NAME=&quot;name&quot;; const SITE=&quot;mysite&quot;; class my { function f1() { echo NAME;

Константы в классе
//Загловочный #include &lt;stdlib.h&gt; class DynArray { public: int element(int idx); int size (); bool push_back(int...

В каком классе объявлять константы?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace...

Комбинаторно- вероятностный смысл константы пи, гамма функция и обобщение константы пи
Добавлено через 33 минуты Известна формула для выражения \pi, ...

Доля отличников в классе больше 2/5, но меньше 3/7, а всего в классе не более 15 учеников. Сколько всего в классе учеников?
Добрый вечер! Подскажите, пожалуйста! &quot;Доля отличников в классе больше 2/5, но меньше 3/7, а всего в классе не более 15 учеников....


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru