class foo{
private:
int map[SCENE_WIDTH * SCENE_HEIGHT];
}
的问题是我不知道的SCENE WIDTH然而,我想这样做:组数组大小
int map[];
void setSize(int s){
map[5];
}
我知道要做到这一点的唯一方法做int * map然后map = new int [3],但是接下来我将使用动态内存,之后我将不得不删除它。如何做到像“第一种方法”?
class foo{
private:
int map[SCENE_WIDTH * SCENE_HEIGHT];
}
的问题是我不知道的SCENE WIDTH然而,我想这样做:组数组大小
int map[];
void setSize(int s){
map[5];
}
我知道要做到这一点的唯一方法做int * map然后map = new int [3],但是接下来我将使用动态内存,之后我将不得不删除它。如何做到像“第一种方法”?
在标准C++中调整数组的大小是不可能的。
改为使用std::vector
。例如;
#include <vector>
class foo
{
public:
foo(std::size_t size = 0) : map(size) {}; // initialises number of elements in map
void resize(std::size_t size)
{
map.resize(size);
};
private:
std::vector<int> map;
};
所含vector<int>
将被销毁时隐式类型foo
的目的是破坏,会释放分配给它的所有资源。
除了std::vector
有容器满足特殊需求,但std::vector
是一个很好的默认选择在实践中。
int map[SIZE];
在堆栈上分配和此阵列的大小必须在编译时是已知的,并且必须在这个变量的声明中所提到的,因为否则的语法map[5];
将作为提取待处理这个数组的第六个值。
总而言之,你不能这样做,但你可以使用std::vector
为此目的。
'int map [SIZE]'将分配到任何分配foo对象的位置,这可能是堆栈,堆,静态数据区或其他任何地方 –
改为使用'std :: vector'和'resize()'。 –
简短的版本是,你不能。数组的大小必须是编译时常量。 (Gcc和clang对运行时大小的数组有一个扩展,但我不认为这对于类成员是有效的)。这里做的正常事情是使用标准库组件['std :: vector'](http://en.cppreference.com/w/cpp/container/vector)。 – BoBTFish
然后它更糟,如果我必须通过载体,因为我需要一个迭代器 –