2011-09-05 34 views
0

我遇到一個錯誤,因爲主題爲assignment of data-member ‘RootBoxT<CORE::DoubleWrapper>::innerBox_’ in read-only structure。我「可能」知道爲什麼會發生這種情況,但我需要更多地瞭解這些規則。錯誤:以只讀結構分配數據成員'RootBoxT <CoreE :: DoubleWrapper> :: innerBox_'

我提出的所有實例爲RootBoxTconst,和成員變量RootBoxT類的*innerBox_const類型。在RootBoxT類的其中一種方法中,我需要更新*innerBox_,所以我調用delete來釋放innerBox_的內存,併爲它分配另一個const指針。

我的問題是:

  1. 這是正確的方法,當我需要更新一個const指針的值,我只是刪除它,並與其他常量指針分配呢?
  2. 這個錯誤是由於RootBoxT的實例是const這個事實造成的,但是其中一個方法改變了成員變量指向的位置?如果不是,爲什麼會發生?如果是這樣,我應該只是將這些實例更改爲非常量?

我真的搞錯了const關鍵字爲我目前的項目,因爲我是新的C++。謝謝。

+0

你不能*更新'const'對象的值*。 'const'意味着你不能改變它。此外,你最好發佈你的代碼,因爲你在談論const指針或指向const對象的指針並不清楚。 –

回答

1

如果你有這樣的事情:

struct S 
{ 
    int * i; 
}; 

const S對象(s),指針s.iconst而不是它指向(*s.i)的int。這意味着你可以這樣寫:

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

但不是:

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

,因爲這將改變指針價值,不是它指向。