Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Костяныч
15 / 15 / 0
Регистрация: 31.10.2010
Сообщений: 1,233
Записей в блоге: 2
#1

Поле mutable в структуре - C++

30.06.2015, 12:26. Просмотров 527. Ответов 20
Метки нет (Все метки)

Добрый день.
Есть структура
C++
1
2
3
4
5
6
struct NameStructure
{
  protected:
    mutable TDateTime Time;
.......
}
Эту структуру я объявил в другом классе и пытаюсь заполнить переменную Time. А мне выпадает ошибка: E2247 NameStructure::Time' is not accessible.
Подскажите пожалуйста, как ей присвоить значение?
Спасибо.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ilot
Модератор
Эксперт С++
1784 / 1159 / 224
Регистрация: 16.05.2013
Сообщений: 3,048
Записей в блоге: 5
Завершенные тесты: 1
30.06.2015, 12:29     Поле mutable в структуре #2
Убрать protected
Костяныч
15 / 15 / 0
Регистрация: 31.10.2010
Сообщений: 1,233
Записей в блоге: 2
30.06.2015, 12:33  [ТС]     Поле mutable в структуре #3
Ilot, не зря наверно автор этого кода сделал protected....
По другому никак?
lss
921 / 851 / 281
Регистрация: 10.10.2012
Сообщений: 2,701
30.06.2015, 12:35     Поле mutable в структуре #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Костяныч Посмотреть сообщение
По другому никак?
Сделай, в public-области, сеттер для присвоения значения Time.
castaway
Эксперт С++
4873 / 3012 / 370
Регистрация: 10.11.2010
Сообщений: 11,061
Записей в блоге: 10
Завершенные тесты: 1
30.06.2015, 12:38     Поле mutable в структуре #5
Цитата Сообщение от Костяныч Посмотреть сообщение
По другому никак?
Добавь метод, изменяющий переменную, или метод, который возвращает ссылку на неё.
Kuzia domovenok
1887 / 1742 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 1
30.06.2015, 12:44     Поле mutable в структуре #6
Цитата Сообщение от Костяныч Посмотреть сообщение
не зря наверно автор этого кода сделал protected
mutable и protected это вообще из двух разных плоскостей понятия.
Возможно, имелось в виду, mutable и const?
Ilot
Модератор
Эксперт С++
1784 / 1159 / 224
Регистрация: 16.05.2013
Сообщений: 3,048
Записей в блоге: 5
Завершенные тесты: 1
30.06.2015, 12:57     Поле mutable в структуре #7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Возможно, имелось в виду, mutable и const?
Скорее всего имелось ввиду, что переменная для внутреннего пользования и никто не должен лазИть к ней своими шалавливыми ручками не иначе как посредством наследования и переопределения метода работы с ней в наследуемом классе.
Kuzia domovenok
1887 / 1742 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 1
30.06.2015, 12:59     Поле mutable в структуре #8
Цитата Сообщение от Ilot Посмотреть сообщение
Скорее всего имелось ввиду, что переменная для внутреннего пользования и никто не должен лазИть к ней своими шалавливыми ручками не иначе как посредством наследования и переопределения метода работы с ней в наследуемом классе.
Ilot, при чём тут мютабл?
lss
921 / 851 / 281
Регистрация: 10.10.2012
Сообщений: 2,701
30.06.2015, 13:03     Поле mutable в структуре #9
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
при чём тут мютабл?
Не при чём. Считай, что его нет, вопрос темы от этого не меняется.
Цитата Сообщение от Костяныч Посмотреть сообщение
NameStructure::Time' is not accessible.
Подскажите пожалуйста, как ей присвоить значение?
castaway
Эксперт С++
4873 / 3012 / 370
Регистрация: 10.11.2010
Сообщений: 11,061
Записей в блоге: 10
Завершенные тесты: 1
30.06.2015, 13:21     Поле mutable в структуре #10
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Ilot, при чём тут мютабл?
На самом деле да, он не при чём. Я в тему зашёл только из-за него)
Ilot
Модератор
Эксперт С++
1784 / 1159 / 224
Регистрация: 16.05.2013
Сообщений: 3,048
Записей в блоге: 5
Завершенные тесты: 1
30.06.2015, 13:27     Поле mutable в структуре #11
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Ilot, при чём тут мютабл?
Притом, что эта переменная может использоваться подобно мъютексу.
castaway
Эксперт С++
4873 / 3012 / 370
Регистрация: 10.11.2010
Сообщений: 11,061
Записей в блоге: 10
Завершенные тесты: 1
30.06.2015, 13:44     Поле mutable в структуре #12
Цитата Сообщение от Ilot Посмотреть сообщение
Притом, что эта переменная может использоваться подобно мъютексу.
Ну, это, как бы две разные сущности. Ключевое слово mutable не имеет ничего общего со взаимным исключением.
Ilot
Модератор
Эксперт С++
1784 / 1159 / 224
Регистрация: 16.05.2013
Сообщений: 3,048
Записей в блоге: 5
Завершенные тесты: 1
30.06.2015, 14:56     Поле mutable в структуре #13
Цитата Сообщение от castaway Посмотреть сообщение
Ключевое слово mutable не имеет ничего общего со взаимным исключением.
castaway, простой пример:
Э. Уильямс Параллельное программирование в действии стр. 120.
castaway
Эксперт С++
4873 / 3012 / 370
Регистрация: 10.11.2010
Сообщений: 11,061
Записей в блоге: 10
Завершенные тесты: 1
30.06.2015, 15:00     Поле mutable в структуре #14
Цитата Сообщение от Ilot Посмотреть сообщение
castaway, простой пример:
Э. Уильямс Параллельное программирование в действии стр. 120.
Извини, но я ради такого простого примера не буду покупать книгу, или искать её электронный вариант.
На твоём месте было бы правильнее цитировать его.
Ilot
Модератор
Эксперт С++
1784 / 1159 / 224
Регистрация: 16.05.2013
Сообщений: 3,048
Записей в блоге: 5
Завершенные тесты: 1
30.06.2015, 15:05     Поле mutable в структуре #15
Цитата Сообщение от castaway Посмотреть сообщение
На твоём месте было бы правильнее цитировать его.
Твоя правда.
В книге приводится пример многопоточного контейнера.
Структура класса:
Поле mutable в структуре
Комментарий:
Поле mutable в структуре
castaway
Эксперт С++
4873 / 3012 / 370
Регистрация: 10.11.2010
Сообщений: 11,061
Записей в блоге: 10
Завершенные тесты: 1
30.06.2015, 15:18     Поле mutable в структуре #16
Ilot, эта выдержка - всего лишь пример конкретного случая, который не подтверждает слова:
Цитата Сообщение от Ilot Посмотреть сообщение
Притом, что эта переменная может использоваться подобно мъютексу.
Ты знаешь для чего существует ключевое слово mutable?
Ilot
Модератор
Эксперт С++
1784 / 1159 / 224
Регистрация: 16.05.2013
Сообщений: 3,048
Записей в блоге: 5
Завершенные тесты: 1
30.06.2015, 15:45     Поле mutable в структуре #17
Цитата Сообщение от castaway Посмотреть сообщение
Ты знаешь для чего существует ключевое слово mutable?
Нет. Просвяти.
DrOffset
6840 / 4051 / 924
Регистрация: 30.01.2014
Сообщений: 6,855
30.06.2015, 16:17     Поле mutable в структуре #18
Цитата Сообщение от Ilot Посмотреть сообщение
Нет.
Для организации изменяемого свойства в неизменяемом объекте.

Добавлено через 4 минуты
Ilot, в данном конкретном случае это проявляется следующим образом: функция empty() - const. Внутри нее нельзя менять состояние объекта. А вот mutable позволяет сделать исключение для этого. В empty мы работаем с объектом, как с неизменяемым. Но по логике работы, нам, тем не менее, нужно его изменить (захватить мютекс), вот тут mutable и пригодился.
Ilot
Модератор
Эксперт С++
1784 / 1159 / 224
Регистрация: 16.05.2013
Сообщений: 3,048
Записей в блоге: 5
Завершенные тесты: 1
30.06.2015, 16:40     Поле mutable в структуре #19
DrOffset, я просто шучу. Я понимаю для чего необходим mutable.
Просто вопрос castaway'я звучит примерно как: "Ты знаешь о чем говоришь?" . Вот я и смутился.... хотя есть еще один способ применения ключевого слова mutable. А именно при передаче переменных в блямба функцию. Потому как без ключевого слова mutable они передаются по константной ссылке (при захвате внешних переменных).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2015, 16:46     Поле mutable в структуре
Еще ссылки по теме:

Поле size в структуре типа дерево C++
C++ Назначение mutable в лямбда-функции
C++ Обнулить поле ID в структуре
C++ Const_cast и mutable
Внутренняя работа mutable C++

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

Или воспользуйтесь поиском по форуму:
Nick Alte
Эксперт С++
1603 / 995 / 118
Регистрация: 27.09.2009
Сообщений: 1,918
Завершенные тесты: 1
30.06.2015, 16:46     Поле mutable в структуре #20
Насколько я понимаю, mutable вводили для обозначения вспомогательных полей, которые логически не являются частью состояния объектов. Например, у нас есть какой-то контейнер с поиском, который кеширует результат последнего запроса на случай, если он повторится. Логически чтение из такого контейнера будет const-операцией, а в суровой действительности надо будет изменять lastFound. Вот тут-то мышка mutable и пригодится.
Yandex
Объявления
30.06.2015, 16:46     Поле mutable в структуре
Ответ Создать тему
Опции темы

Текущее время: 14:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru