Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Костяныч
16 / 16 / 4
Регистрация: 31.10.2010
Сообщений: 1,238
Записей в блоге: 2
#1

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

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

Добрый день.
Есть структура
C++
1
2
3
4
5
6
struct NameStructure
{
  protected:
    mutable TDateTime Time;
.......
}
Эту структуру я объявил в другом классе и пытаюсь заполнить переменную Time. А мне выпадает ошибка: E2247 NameStructure::Time' is not accessible.
Подскажите пожалуйста, как ей присвоить значение?
Спасибо.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.06.2015, 12:26
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Поле mutable в структуре (C++):

Не заполнет поле в структуре
Описал структуру, но она некорректно заполняется. А именно, пропускается поле...

Обнулить поле ID в структуре
Добрый вечер! Подскажите как обнулить поле ID в структуре? orderId - это...

Поле size в структуре типа дерево
Доброго времени суток. Вопрос, где лучше хранить поле содержащее размер...

const_cast mutable
в чем разница? спасибо.

Const_cast и mutable
В чем их отличие и когда их необходимо использовать (если не нарушена...

Смысл спецификатора mutable
В этом тема и заключается %-)

20
Ilot
Эксперт С++
1826 / 1184 / 342
Регистрация: 16.05.2013
Сообщений: 3,119
Записей в блоге: 5
Завершенные тесты: 1
30.06.2015, 12:29 #2
Убрать protected
1
Костяныч
16 / 16 / 4
Регистрация: 31.10.2010
Сообщений: 1,238
Записей в блоге: 2
30.06.2015, 12:33  [ТС] #3
Ilot, не зря наверно автор этого кода сделал protected....
По другому никак?
0
lss
926 / 855 / 355
Регистрация: 10.10.2012
Сообщений: 2,705
30.06.2015, 12:35 #4
Лучший ответ Сообщение было отмечено Костяныч как решение

Решение

Цитата Сообщение от Костяныч Посмотреть сообщение
По другому никак?
Сделай, в public-области, сеттер для присвоения значения Time.
1
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
30.06.2015, 12:38 #5
Цитата Сообщение от Костяныч Посмотреть сообщение
По другому никак?
Добавь метод, изменяющий переменную, или метод, который возвращает ссылку на неё.
1
Kuzia domovenok
2212 / 1981 / 443
Регистрация: 25.03.2012
Сообщений: 6,949
Записей в блоге: 1
30.06.2015, 12:44 #6
Цитата Сообщение от Костяныч Посмотреть сообщение
не зря наверно автор этого кода сделал protected
mutable и protected это вообще из двух разных плоскостей понятия.
Возможно, имелось в виду, mutable и const?
1
Ilot
Эксперт С++
1826 / 1184 / 342
Регистрация: 16.05.2013
Сообщений: 3,119
Записей в блоге: 5
Завершенные тесты: 1
30.06.2015, 12:57 #7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Возможно, имелось в виду, mutable и const?
Скорее всего имелось ввиду, что переменная для внутреннего пользования и никто не должен лазИть к ней своими шалавливыми ручками не иначе как посредством наследования и переопределения метода работы с ней в наследуемом классе.
1
Kuzia domovenok
2212 / 1981 / 443
Регистрация: 25.03.2012
Сообщений: 6,949
Записей в блоге: 1
30.06.2015, 12:59 #8
Цитата Сообщение от Ilot Посмотреть сообщение
Скорее всего имелось ввиду, что переменная для внутреннего пользования и никто не должен лазИть к ней своими шалавливыми ручками не иначе как посредством наследования и переопределения метода работы с ней в наследуемом классе.
Ilot, при чём тут мютабл?
1
lss
926 / 855 / 355
Регистрация: 10.10.2012
Сообщений: 2,705
30.06.2015, 13:03 #9
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
при чём тут мютабл?
Не при чём. Считай, что его нет, вопрос темы от этого не меняется.
Цитата Сообщение от Костяныч Посмотреть сообщение
NameStructure::Time' is not accessible.
Подскажите пожалуйста, как ей присвоить значение?
0
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
30.06.2015, 13:21 #10
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Ilot, при чём тут мютабл?
На самом деле да, он не при чём. Я в тему зашёл только из-за него)
0
Ilot
Эксперт С++
1826 / 1184 / 342
Регистрация: 16.05.2013
Сообщений: 3,119
Записей в блоге: 5
Завершенные тесты: 1
30.06.2015, 13:27 #11
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Ilot, при чём тут мютабл?
Притом, что эта переменная может использоваться подобно мъютексу.
0
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
30.06.2015, 13:44 #12
Цитата Сообщение от Ilot Посмотреть сообщение
Притом, что эта переменная может использоваться подобно мъютексу.
Ну, это, как бы две разные сущности. Ключевое слово mutable не имеет ничего общего со взаимным исключением.
0
Ilot
Эксперт С++
1826 / 1184 / 342
Регистрация: 16.05.2013
Сообщений: 3,119
Записей в блоге: 5
Завершенные тесты: 1
30.06.2015, 14:56 #13
Цитата Сообщение от castaway Посмотреть сообщение
Ключевое слово mutable не имеет ничего общего со взаимным исключением.
castaway, простой пример:
Э. Уильямс Параллельное программирование в действии стр. 120.
0
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
30.06.2015, 15:00 #14
Цитата Сообщение от Ilot Посмотреть сообщение
castaway, простой пример:
Э. Уильямс Параллельное программирование в действии стр. 120.
Извини, но я ради такого простого примера не буду покупать книгу, или искать её электронный вариант.
На твоём месте было бы правильнее цитировать его.
0
Ilot
Эксперт С++
1826 / 1184 / 342
Регистрация: 16.05.2013
Сообщений: 3,119
Записей в блоге: 5
Завершенные тесты: 1
30.06.2015, 15:05 #15
Цитата Сообщение от castaway Посмотреть сообщение
На твоём месте было бы правильнее цитировать его.
Твоя правда.
В книге приводится пример многопоточного контейнера.
Структура класса:
Поле mutable в структуре
Комментарий:
Поле mutable в структуре
0
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
30.06.2015, 15:18 #16
Ilot, эта выдержка - всего лишь пример конкретного случая, который не подтверждает слова:
Цитата Сообщение от Ilot Посмотреть сообщение
Притом, что эта переменная может использоваться подобно мъютексу.
Ты знаешь для чего существует ключевое слово mutable?
0
Ilot
Эксперт С++
1826 / 1184 / 342
Регистрация: 16.05.2013
Сообщений: 3,119
Записей в блоге: 5
Завершенные тесты: 1
30.06.2015, 15:45 #17
Цитата Сообщение от castaway Посмотреть сообщение
Ты знаешь для чего существует ключевое слово mutable?
Нет. Просвяти.
0
DrOffset
7518 / 4514 / 1097
Регистрация: 30.01.2014
Сообщений: 7,362
30.06.2015, 16:17 #18
Цитата Сообщение от Ilot Посмотреть сообщение
Нет.
Для организации изменяемого свойства в неизменяемом объекте.

Добавлено через 4 минуты
Ilot, в данном конкретном случае это проявляется следующим образом: функция empty() - const. Внутри нее нельзя менять состояние объекта. А вот mutable позволяет сделать исключение для этого. В empty мы работаем с объектом, как с неизменяемым. Но по логике работы, нам, тем не менее, нужно его изменить (захватить мютекс), вот тут mutable и пригодился.
0
Ilot
Эксперт С++
1826 / 1184 / 342
Регистрация: 16.05.2013
Сообщений: 3,119
Записей в блоге: 5
Завершенные тесты: 1
30.06.2015, 16:40 #19
DrOffset, я просто шучу. Я понимаю для чего необходим mutable.
Просто вопрос castaway'я звучит примерно как: "Ты знаешь о чем говоришь?" . Вот я и смутился.... хотя есть еще один способ применения ключевого слова mutable. А именно при передаче переменных в блямба функцию. Потому как без ключевого слова mutable они передаются по константной ссылке (при захвате внешних переменных).
0
Nick Alte
Эксперт С++
1646 / 1018 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
30.06.2015, 16:46 #20
Насколько я понимаю, mutable вводили для обозначения вспомогательных полей, которые логически не являются частью состояния объектов. Например, у нас есть какой-то контейнер с поиском, который кеширует результат последнего запроса на случай, если он повторится. Логически чтение из такого контейнера будет const-операцией, а в суровой действительности надо будет изменять lastFound. Вот тут-то мышка mutable и пригодится.
1
30.06.2015, 16:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2015, 16:46
Привет! Вот еще темы с решениями:

Внутренняя работа mutable
Привет. Хочу спросить у особо продвинутых, как работает ключевое слово mutable....

Лямбда-функция и mutable переменная
Добрый день! Есть такой код: void foo() { int id = 0; auto l = ()...

Назначение mutable в лямбда-функции
Прокомментируйте, чтоб не выдумывать. Спецификатор mutable определяет по списку...

Изменить const с помощью mutable
Привет всем, у меня 1 вот такой вопрос, почему в етом коде "а" - не изменяется?...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru