通过Overloading Operator []访问自定义数组包装器中的元素
Accessing element in custom array wrapper via overloading operator []
我正在尝试实现自己的数组包装器。我超载[]运算符,返回数组中元素的地址。但是,当我在MAIN中动态分配ArrayWrapper类时,它不起作用。
为什么它不起作用? 是因为变量ARR是一个指针?
我得到这些错误:
描述资源路径位置类型不能绑定'std :: ostream {aka std :: basic_ostream}'lvalue to 'std :: basic_ostream&&''cviceni.cpp/cviceni/src行25 c/c 问题
描述资源路径位置类型"操作员<<" (操作数类型是'std :: ostream {aka std :: basic_ostream}'和 'arraywrapper'(cviceni.cpp/cviceni/src行25 c/c 问题
工作代码
ArrayWrapper arr(250);
try
{
for(int i = 0; i < arr.getSize(); i++)
{
arr[i] = i + 1;
cout << arr[i] << endl;
}
}
catch(std::range_error& e)
{
cout << e.what() << endl;
}
cout << "End..." << endl;
return 0;
}
不工作代码:
ArrayWrapper *arr = new ArrayWrapper(250);
try
{
for(int i = 0; i < arr->getSize(); i++)
{
arr[i] = i + 1;
cout << arr[i] << endl;
}
}
ArrayWrapper实现:
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;};
};
是您在第二个示例中使用指针 arr[2]
不是ArrayWrapper上的操作,它在指针上的操作。
ArrayWrapper *arr = new ArrayWrapper(250);
try
{
for(int i = 0; i < arr->getSize(); i++)
{
(*arr)[i] = i + 1;
cout << (*arr)[i] << endl;
}
}
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 使用不带参数的函数访问结构元素
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- C++如何通过用户输入删除列表元素
- 如何在c++17中制作一个模板包装器/装饰器
- lower_bound()返回最后一个元素
- 基于多个条件处理地图中的所有元素
- 调整大小后指向元素值的指针unordered_map有效?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 使用函数"remove"删除重复元素
- 具有最大子序列大小的序列,每个元素都相同
- 通过Overloading Operator []访问自定义数组包装器中的元素
- 用一个表达式包装变元宏中的每个元素
- 访问向量 c++11 中的引用包装元素
- 增强 MPL 将每个元素包装在一个集合中
- 为什么分配给AVX矢量包装类对象数组的元素会引发访问违规错误
- D3D11_INPUT_ELEMENT_DESC:元素类型/排序/包装
- 如何使用c++ Mat类ptr对象的基本C包装器打印Mat元素?