【问题标题】:error: assignment of data-member ‘RootBoxT<CORE::DoubleWrapper>::innerBox_’ in read-only structure错误:在只读结构中分配数据成员“RootBoxT<CORE::DoubleWrapper>::innerBox_”
【发布时间】:2011-09-05 20:40:42
【问题描述】:

我遇到了主题所说的错误:assignment of data-member ‘RootBoxT&lt;CORE::DoubleWrapper&gt;::innerBox_’ in read-only structure。我“可能”知道为什么会发生这种情况,但我需要更多地了解规则。

我将RootBoxT的所有实例都设为const,而RootBoxT类的成员变量*innerBox_也是const类型。在RootBoxT 类的一个方法中,我需要更新*innerBox_,所以我调用delete 来释放innerBox_ 的内存并为其分配另一个const 指针。

我的问题是:

  1. 这是正确的方法吗,当我需要更新 const 指针的值时,我只需将其删除并分配另一个 const 指针?
  2. 这个错误是因为RootBoxT的实例是const但是其中一个方法改变了成员变量指向的位置吗?如果不是,为什么会发生?如果是这样,我应该将这些实例更改为非常量吗?

我真的搞砸了我当前项目的 const 关键字,因为我对 C++ 还很陌生。谢谢。

【问题讨论】:

  • 您不能更新const 对象的值const 表示您无法更改它。此外,您最好发布您的代码,因为不清楚您是在谈论 const 指针还是指向 const 对象的指针。

标签: c++ constants structure readonly


【解决方案1】:

如果你有这样的事情:

struct S
{
   int * i;
};

和一个const S 对象(s),指针s.iconst,但不是它指向的int*s.i)。这意味着你可以写:

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

但不是:

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

因为这会修改 指针 的值,而不是它所指向的值。

【讨论】:

    猜你喜欢
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多