-3
我想实现我自己的数组包装。我重载了[]运算符,返回数组中元素的地址。但是,当我动态地分配在主要的ArrayWrapper类,它不起作用。通过重载运算符访问自定义数组包装中的元素[]
为什么它不起作用?是否因为变量arr是一个指针?
我得到这些错误:
描述资源路径位置类型不能绑定 '的std :: ostream的{又名 的std :: basic_ostream}' 左值到 '的std :: basic_ostream & &' Cviceni。 CPP/Cviceni/SRC线25 C/C++ 问题
描述资源路径位置类型不匹配关于 '操作者< <' (操作数的类型是“的std :: ostream的{又名的std ::基本_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;};
};
将错误消息复制粘贴到问题本身中。 –
只需将'cout << arr [i] << endl;'更改为'cout <<(* arr)[i] << endl;'。你根本不应该为这种情况弄个指针。 –
另外[三条法则](https://stackoverflow.com/questions/4172722/what-is-the-rule-of-reeree); *“我重载了[]运算符,返回数组中元素的地址。”* - 否,它返回一个引用。如果您使用'size_t'作为索引和大小,则不需要检查负数。 – LogicStuff