Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过重载运算符[]访问自定义数组包装器中的元素_C++_Arrays_Arraylist_Operator Overloading_Dynamic Memory Allocation - Fatal编程技术网

C++ 通过重载运算符[]访问自定义数组包装器中的元素

C++ 通过重载运算符[]访问自定义数组包装器中的元素,c++,arrays,arraylist,operator-overloading,dynamic-memory-allocation,C++,Arrays,Arraylist,Operator Overloading,Dynamic Memory Allocation,我正在尝试实现自己的数组包装器。我重载了[]运算符,它返回数组中元素的地址。但是,当我在main中动态分配ArrayWrapper类时,它不起作用 为什么不工作?是因为变量arr是指针吗? 我发现以下错误: 说明资源路径位置类型无法绑定'std::ostream{aka std::basic_ostream}左值到 “标准::基本团队和”Cviceni.cpp/Cviceni/src 25号线C/C++ 问题 Description资源路径位置类型与“operator不匹配在第二个示例中使用的是

我正在尝试实现自己的数组包装器。我重载了[]运算符,它返回数组中元素的地址。但是,当我在main中动态分配ArrayWrapper类时,它不起作用

为什么不工作?是因为变量arr是指针吗?

我发现以下错误:

说明资源路径位置类型无法绑定'std::ostream{aka std::basic_ostream}左值到 “标准::基本团队和”Cviceni.cpp/Cviceni/src 25号线C/C++ 问题


Description资源路径位置类型与“operator不匹配在第二个示例中使用的是指针
arr[2]
不是对ArrayRapper的操作,而是对指针的操作

ArrayWrapper *arr = new ArrayWrapper(250);

  try
  {
    for(int i = 0; i < arr->getSize(); i++)
    {
      (*arr)[i] = i + 1;
      cout << (*arr)[i] << endl;
    }
  }
ArrayWrapper*arr=新的ArrayWrapper(250);
尝试
{
对于(inti=0;igetSize();i++)
{
(*arr)[i]=i+1;

无法复制将错误消息粘贴到问题本身。只需更改
也可以;“我重载了[]运算符,返回数组中元素的地址。”-不,它返回一个引用。如果使用
size\t
进行索引和大小设置,则无需检查负数。
ArrayWrapper *arr = new ArrayWrapper(250);

  try
  {
    for(int i = 0; i < arr->getSize(); i++)
    {
      arr[i] = i + 1;
      cout << arr[i] << endl;
    }
  }
class ArrayWrapper
{
private:
  int size;
  int *elements;

public:
  ArrayWrapper(int n) : size(n), elements(new int[n])
  {
    for(int i = 0; i < size; i++)
      elements[i] = 0;
  };

  ~ArrayWrapper(){delete []elements;};

  int& operator[](int i)
  {
    if(i >= size || i < 0)
      {
    throw range_error("Out of range");
      }
    return elements[i];
  };

  int getSize(){ return size;};
};
ArrayWrapper *arr = new ArrayWrapper(250);

  try
  {
    for(int i = 0; i < arr->getSize(); i++)
    {
      (*arr)[i] = i + 1;
      cout << (*arr)[i] << endl;
    }
  }