2011-09-05 32 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 

,因为这将改变指针价值,不是它指向。