我已经搜索过并搜索过,但却找不到任何可以解决我的困惑的事情。
我代表一个网格,并有两个类,例如:
class Term {
...
};
class GridPoint{
Term a;
Term b;
Term c;
...
};
我想在堆上有一个大的固定大小的数组,其中数组的每个元素都是一个GridPoint,它本身包含多个术语。
但是,以下示例将无法编译:
GridPoint* pGrid = new GridPoint[100][100];
根据gcc:
错误:初始化时无法将'GridPoint(*)[100]'转换为'GridPoint *'
答案 0 :(得分:-1)
首先,我想在现代C ++中使用new
和delete
建议不,而是使用智能指针或标准库中的容器将其封装为例如std::vector
。
话虽这么说,为了让你的例子工作,你必须在循环中初始化一个数组数组,如下所示:
GridPoint** pGrid = new GridPoint*[100];
for (std::size_t i = 0; i != 100; ++i) {
pGrid[i] = new GridPoint[100];
}
// Do something...
for (std::size_t i = 0; i != 100; ++i) {
delete[] pGrid[i];
}
delete[] pGrid;
要获得更好的选择,只需使用std::array
或std::vector
:
std::array<std::array<GridPoint, 100>, 100> pGrid;
注意: std::array
封装了一个用于存储数据的静态数组。这意味着如果您分配具有自动存储持续时间的std::array
对象,则其数据将不被动态分配(数据将不在“堆”上)。
std::vector
将使用动态分配来存储其数据。