繁体   English   中英

错误:分配只读位置'arr2.IntArray :: operator [](1)'arr2 [1] = 24;

[英]error: assignment of read-only location ‘arr2.IntArray::operator[](1)’ arr2[1] = 24;

我是c ++的初学者,正在学习使用重载操作。 在我的主程序中,我有以下代码:

IntArray arr2(3)
arr2[1] = 24;

在我的标头中,我有这段代码

class IntArray {
  char *elt;
  int size
public:
  const int& operator[] (int i);

在我的.cpp文件中,我有以下构造函数:

/* one-integer constructor */
IntArray::IntArray(int sz) {
  elt = new char[sz];
  for (int i = 0; i<sz; i++)
    elt[i] = 0;
  size = sz;
}

还有这个索引运算符

/* Index operator */
const int& IntArray::operator[] (int i) {
   if (i < 0) {
     cout << "warning: value out of bounds" <<endl;
   return elt[0];
   }
   else if (i > size) {
     cout << "warning: value out of bounds" <<endl;
   return elt[size];
   }
   else
    return elt[i];
   }

当我尝试将值24分配给数组中的索引位置时出现此错误

错误:分配了只读位置'arr2.IntArray :: operator'arr2 [1] = 24;

我究竟做错了什么?

您将返回对const的引用-这意味着它是不可修改的(根据错误消息,它是“只读位置”)。 但是,无论如何,您都试图对其进行修改。

您的意思是返回对非const的引用:

int& operator[] (int i) {
    // same as before
}

为此,必须将elt固定为正确的类型: int* 毕竟,您要创建一个int数组而不是char数组。


注意:超出范围打印错误不是很有帮助。 您应该选择抛出异常,或者简单地断言给定索引是有界的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM