尝试动态调整形状矩阵的大小。这是绘图程序的一部分,其中_capacity是在框架上绘制的形状数。
获取关于_capacity
的新形状的错误,说表达式需要具有常量值。
void ShapeStore::Grow(int minimumCapacity)
{
_capacity = max (minimumCapacity, 2 * _capacity);
if (_capacity)
{
Shape ***newData = new Shape[_frames][_capacity]; //figure out this
int i;
for (int k = 0; k < _frames; k++)
for (i=0;i<_count;i++)
newData[k][i] = _data[k][i];
delete [] _data;
_data = newData;
} //*/
}
答案 0 :(得分:3)
Shape ***newData = new Shape[_frames][_capacity]; //figure out this
这不符合你的想法。 它只在免费商店中分配一个指向数组的指针数组。假设_capacity
是一个常量,数组中的每个指针都是一个指向另一个固定数组的指针,该数组完全保持{{1} } _capacity
的实例。这是一张图片:
index +-----------+ newData --> | 0 | (pointer to a fixed array of _capacity instances of Shape) +-----------+ | 1 | (pointer to a fixed array of _capacity instances of Shape) +-----------+ | 2 | (pointer to a fixed array of _capacity instances of Shape) +-----------+ | | ....... | | +-----------+ | _frames-1 | (pointer to a fixed array of _capacity instances of Shape) +-----------+ (This is the only thing that is actually allocated)
表达式Shape
没有分配足够的内存来实际保存new Shape[_frames][_capacity]
_frame*_capacity
个实例。此外,由于数组中的每个指针都指向另一个 fixed 大小的数组,编译器会在代码片段中抱怨非常量Shape
。
使用_capacity
来保存Shape***
的线性数组,而不是使用令人困惑的new[_frames][_capacity]
和std::vector
业务,然后使用寻址方案来模拟行和列,像这样:
Shape
答案 1 :(得分:0)
访问newData
的内容时,不是newData[k][i]
而是(*newData)[k][i]
newData
不是二维数组,它是指向二维数组的指针。声明时的每个*
的经验法则应与正在使用的*
,->
或[]
匹配。