【发布时间】:2014-10-30 23:20:13
【问题描述】:
我有一个带有多维数组的类:
可以用这个类创建一、二、...、n 维数组
如果数组有 n 维,我想使用 n
operator[]来获取对象:
示例:
A a({2,2,2,2}];
a[0][1][1][0] = 5;
但数组不是指向其他向量等的指针向量...
所以我希望 operator[] 返回一个类对象,直到最后一个维度,然后返回一个整数
这是一个高度简化的代码,但它显示了我的问题:
我收到的错误:"[Error] cannot convert 'A::B' to 'int' in initialization"
#include <cstddef> // nullptr_t, ptrdiff_t, size_t
#include <iostream> // cin, cout...
class A {
private:
static int* a;
public:
static int dimensions;
A(int i=0) {
dimensions = i;
a = new int[5];
for(int j=0; j<5; j++) a[j]=j;
};
class B{
public:
B operator[](std::ptrdiff_t);
};
class C: public B{
public:
int& operator[](std::ptrdiff_t);
};
B operator[](std::ptrdiff_t);
};
//int A::count = 0;
A::B A::operator[] (std::ptrdiff_t i) {
B res;
if (dimensions <= 1){
res = C();
}
else{
res = B();
}
dimensions--;
return res;
}
A::B A::B::operator[] (std::ptrdiff_t i){
B res;
if (dimensions <=1){
res = B();
}
else{
res = C();
}
dimensions--;
return res;
}
int& A::C::operator[](std::ptrdiff_t i){
return *(a+i);
}
int main(){
A* obj = new A(5);
int res = obj[1][1][1][1][1];
std::cout<< res << std::endl;
}
【问题讨论】:
-
你知道 A* obj = new A(5); int res = obj[1][1][1][1][1];适用于指向 A 的指针? obj[1] 不 调用您的运算符,但访问 A 数组中的第二个元素!
-
@Oncaphillis,完全正确,在我的回答中甚至没有意识到这一点
标签: c++ arrays multidimensional-array operator-overloading