新表达式中的数组大小必须是常量(动态数组)
array size in new-expression must be constant (dynamic array)
大家好,我正在尝试创建一个基本上是一和零的 3D 矩阵的类。不幸的是,当我尝试在构造函数中动态分配 3D 矩阵时,控制台抛出我:"新表达式中的数组大小必须是恒定的" 我不知道为什么会这样,编译器似乎认为它是一个静态数组。
这是代码
#include <stdlib.h>
#include <iostream>
class map
{
public:
map( int, int, int,std::string);
~map();
private:
int dx,dy,dz;
std::string generatorName;
bool* matrix3D;
};
map::map(int x=0,int y=0,int z=0,std::string gen="EMPTY")
{
matrix3D=new bool[x][y][z];
generatorName=gen;
}
map::~map()
{
delete matrix3D;
}
使函数模板化并以这种方式传递大小。
template <size_t N, etc>
...
Array [N]
如果您希望程序按原样工作,包括使用 [ ]
访问每个维度,则可以使用 std::vector 执行此操作
#include <vector>
//...
typedef std::vector<bool> boolArray;
typedef std::vector<boolArray> boolArray2D;
typedef std::vector<boolArray2D> boolArray3D;
class mymap
{
public:
mymap( int, int, int,std::string);
private:
int dx,dy,dz;
std::string generatorName;
boolArray3D matrix3D;
};
mymap::mymap(int x=0,int y=0,int z=0,std::string gen="EMPTY") :
matrix3D(x, boolArray2D(y, boolArray(z))), generatorName(gen)
{}
您不需要析构函数,并且使用 [ ]
的现有代码应该可以工作。
请注意,这不如使用一维数组并使用索引来获得某个 x/y/z 组件有效。 但这需要您更改一些现有代码(使用一个[ ]
而不是[ ][ ][ ]
来访问您的元素)。
所以,我认为 vector 的目的是使数组更易于使用,但我发现模板的"语法"过于复杂和不直观......因此,我尝试创建一个指向其他指针数组的指针数组的指针。这是我的最终结果,唯一困扰我的是析构函数,我真的释放了我分配的所有内存吗?
#include <iostream>
class airMap
{
public:
airMap( int, int, int,std::string);
~airMap();
private:
int dx,dy,dz;
std::string generatorName;
bool*** matrix3D;
};
//Constructeurs et destructeurs
airMap::airMap(int x=0,int y=0,int z=0,std::string gen="EMPTY")
{
matrix3D=new bool**[x];
for (int i=0;i<x;i++)
{
matrix3D[i]=new bool*[y];
for (int j=0;j<y;j++)
{
matrix3D[i][j]=new bool[z];
}
}
dx=x;
dy=y;
dz=z;
generatorName=gen;
}
airMap::~airMap()
{
for(int i=0;i<dx;i++)
{
for(int j=0;j<dy;j++)
{
delete[] matrix3D[i][j];
}
delete[] matrix3D[i];
}
delete[] matrix3D;
}
相关文章:
- 是默认情况下分配给char数组常量的值
- 如何创建长度由常量参数指定的数组
- C++常量数组的编译时间较长
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- 使用双指针传递 2D 常量数组
- 将字符串数组传递给接受常量字符**的函数
- 检查输入 std::array 指针数据是否等于某个常量数组
- 为什么不能用常量表达式声明数组?
- 如何在可执行文件中存储常量数组?
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- 初始化常量字符* 数组
- C++将常量字符* 指针数组传递给对象
- 初始化不是整数的巨大常量多维数组的最佳方法是什么?
- 常量数组如何在每个元素中只能包含字符,而 char* 数组能够指向每个元素中的字符串?
- 为什么不建议使用宏符号常量定义一个固定长度的数组呢
- 我可以使用常量定义数组的长度,那么为什么 int d[b] 不起作用呢?
- 如何为包含另一个类实例的数组制作常量 getter?
- LLVM 无法将数组类型强制转换为常量数组
- 如何删除#define使用在c++数组常量
- 静态数组常量是否会影响共享库布局