我自己类型的多维数组
C++: multidimensional array of my own type
嗨,我正在写一个简单的程序,基本上是任何数据类型的3D数组模板。它要求稍后在main函数中可以直接访问数组的元素(即a[1][2][3] = 3;可无警告使用)。以下是目前为止的内容:
template <class T>
class CArray3D {
public:
T*** tempArray;
CArray3D(int x,int y,int z){
tempArray = new T**[x];
for(int i=0;i<x;i++) {
tempArray[i] = new T*[y];
for(int j=0;j<y;j++) {
(tempArray)[i][j] = new T[z];
}
}
};
T& operator[](const int x,const int y,const int z);
};
template <class T>
T& CArray3D<T>::operator[] (const int x,const int y,const int z) {
return tempArray[x];
}
但现在我得到这个错误:重载操作符[]必须是一个二进制操作符(有4个参数)。我试着把它改成
operator[][][](const int x, const...)
,但是我得到了错误:operator[]不能是变量或数据成员的名称。所以我不知道现在该怎么做。谢谢你!
编辑:给出了main函数(是的,这是一个作业):
int main() {
CArray3D<int> a(3,4,5);
int No = 0;
for(int i=0;i<3;i++)
for(int j=0;j<4;j++)
for(int k=0;k<5;k++)
a[i][j][k] = No++;
for(int i=0;i<3;i++)
for(int j=0;j<4;j++)
for(int k=0;k<5;k++)
cout << a[i][j][k] << ",";
return 0;
}
这里我要用[I][j][k]
评论中提到的"proxy class"是最标准的方法。
然而,因为这只是你的作业,如果你只是想在main()
中使用它,那么您可以只返回T**
。
T** operator[](const int x) {
return tempArray[x];
}
相关文章:
- 声明C++具有动态大小的数组类型在 Linux 中工作正常,但不能在 Windows 中工作
- 数组类型 int[n][n] 不可赋值,因为表达式必须具有常量值
- 取消引用结束指针到数组类型的一个
- 结构化绑定初始值设定项表单 { 赋值表达式 } 对于 clang 上的数组类型失败
- 如何在数组类型的模板代码中计算std::size_t
- LLVM 无法将数组类型强制转换为常量数组
- 推荐的方法在不初始化值的情况下使数组类型为 std::unique_ptr?
- 特征:从数组类型中获取标量类型是否记录?
- T D[N] 总是声明数组类型的对象吗?
- 如何在模板中推断数组类型?
- 尝试使用 Array 类的模板构造整数数组时,错误:为什么数组类型"int [5]"不可分配,
- 如何将二维数组类型字符(字符串)作为函数参数传递?
- 如何为所有非数组类型专门化模板?
- 数组类型 (C++) 的初始化
- 我预测char数组类型值只能投射指针类型
- 将数组类型更改为 Int16 会节省存储空间吗?
- 采用通用数组类型的函数
- 数组类型 'int [8]'不可分配
- 数组类型 'float [size]'不可分配
- C++。候选模板被忽略 - 无法将数组类型与自身匹配