错误:分配数据成员 ‘RootBoxT::innerBox_’在只读结构中

发布于 2024-12-03 13:46:28 字数 688 浏览 2 评论 0原文

我遇到了一个错误,如主题所示:在只读结构中分配数据成员 'RootBoxT::innerBox_'。我“可能”知道为什么会发生这种情况,但我需要更多地了解规则。

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

我的问题是:

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

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

I encountered an error as the topic says: assignment of data-member ‘RootBoxT<CORE::DoubleWrapper>::innerBox_’ in read-only structure. I "might" know why does this happen, but I need to learn more about the rules.

I made all instances for RootBoxT as const, and the member variable *innerBox_ of class RootBoxT is also const type. In one of the methods of class RootBoxT, I need to update the *innerBox_, so I called delete to free the memory of innerBox_ and assigned it with another const pointer.

My questions is that:

  1. Is this the right method, that when I need to update the value of a const pointer, I just delete it and assign it with another const pointer?
  2. Is this error cause by the fact that the instance of RootBoxT is const but one of the methods changed the place that a member variable points to? If not, why does it happen? If so, should I just change these instances to non-const?

I really messed up with const keyword for my current project, as I'm rather new to C++. Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

别把无礼当个性 2024-12-10 13:46:28

如果你有这样的东西:

struct S
{
   int * i;
};

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

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

但不能写:

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

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

If you have something like this:

struct S
{
   int * i;
};

and a const S object (s), the pointer s.i is const but not the int it points to (*s.i). This means you can write:

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

but not:

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

because that would modify the pointer value, not what it points to.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文