2011-04-07 66 views
0

我定义了一个结构作为创建/调整数组的大小......不能使用非常量?

struct Point { 
int x, int y 
} 

我正在传递给函数的点阵列,以及,告诉我该数组有多少元素包含一个整数i。在这个世界中,我可以如何在数组中添加一个元素?我意识到没有办法只是添加新的元素,因为阵列不能动态调整大小,所以我需要创建一个新的元素并复制每个元素......但是当我尝试执行以下操作时:

Point newPoints[i+1]; 

我被告知它期望一个恒定的值,当然我不能给它,因为我需要i + 1,而且我是可变的。 C++让我难过。 (如果不是很明显,我来自一个神圣的地方,为你管理你所有的物品......)

P.S.我必须使用阵列...忘了提及。

+2

为什么你必须使用数组? – 2011-04-07 05:17:41

+0

[动态数组]可能的重复(http://stackoverflow.com/questions/232445/dynamic-arrays) – Aamir 2011-04-07 05:18:40

+0

C++有一个为此设计的std :: vector! – 2011-04-07 07:27:11

回答

0

怕你必须在这个上使用一个新的/ malloc。我只在运行时确定,所以在编译时它无法静态分配它在堆栈上所需的内存。

2

在标准C++中,您不能创建具有运行时间设置大小的数组。你需要做的一个:

  1. 声明newPoints为指针,然后分配使用new Point[i+1]值,应用delete []它以后。
  2. 声明newPoints使用类似boost::scoped_array,它自动管理清理。
  3. 使用非数组,例如std::vector;你可以使用&v[0]来得到一个指针。
  4. 使用非标准扩展名,例如GCC提供的扩展名。
0

你必须使用一个恒定值的原因是正在栈上创建的newPoints阵列,并做到这一点的编译器必须知道它会如何大,在编译的时候。为了能够指定动态大小,您必须使用new []和delete []或动态数据结构类(如来自STL)。