ошибка: назначение элемента данных ‘RootBoxT <CORE :: DoubleWrapper> :: innerBox_’ в структуре только для чтения - PullRequest
0 голосов
/ 06 сентября 2011

Я столкнулся с ошибкой, поскольку тема говорит: assignment of data-member ‘RootBoxT<CORE::DoubleWrapper>::innerBox_’ in read-only structure.Я «могу» знать, почему это происходит, но мне нужно больше узнать о правилах.

Я сделал все экземпляры для RootBoxT как const, а переменная-член *innerBox_ класса RootBoxT также имеет тип const.В одном из методов класса RootBoxT мне нужно обновить *innerBox_, поэтому я вызвал delete, чтобы освободить память innerBox_, и присвоил ему другой указатель const.

Мои вопросы таковы:

  1. Является ли это правильным методом, когда мне нужно обновить значение константного указателя, я просто удаляю его и присваиваю с помощью другого константного указателя?
  2. Является ли эта ошибка причиной того факта, что экземпляр RootBoxT равен const, но один из методов изменил место, на которое указывает переменная-член?Если нет, то почему это происходит?Если это так, я должен просто изменить эти экземпляры на неконстантные?

Я действительно испортил ключевое слово const для своего текущего проекта, так как я довольно плохо знаком с C ++.Спасибо.

1 Ответ

1 голос
/ 06 сентября 2011

Если у вас есть что-то вроде этого:

struct S
{
   int * i;
};

и объект const S (s), указатель s.i равен const, но не int, на который он указывает (*s.i).Это означает, что вы можете написать:

*s.i = 4;
delete s.i;

, но не:

s.i = new int (5);   // illegal
int * j = 0;
s.i = j;             // illegal

, потому что это изменило бы значение pointer , а не то, на что оно указывает.

...