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
然後它更糟,如果我必須通過載體,因爲我需要一個迭代器 –