2016-03-12 144 views
1
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],但是接下來我將使用動態內存,之後我將不得不刪除它。如何做到像「第一種方法」?

+1

改爲使用'std :: vector '和'resize()'。 –

+3

簡短的版本是,你不能。數組的大小必須是編譯時常量。 (Gcc和clang對運行時大小的數組有一個擴展,但我不認爲這對於類成員是有效的)。這裏做的正常事情是使用標準庫組件['std :: vector'](http://en.cppreference.com/w/cpp/container/vector)。 – BoBTFish

+0

然後它更糟,如果我必須通過載體,因爲我需要一個迭代器 –

回答

1

在標準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是一個很好的默認選擇在實踐中。

1

int map[SIZE];在堆棧上分配和此陣列的大小必須在編譯時是已知的,並且必須在這個變量的聲明中所提到的,因爲否則的語法map[5];將作爲提取待處理這個數組的第六個值。

總而言之,你不能這樣做,但你可以使用std::vector爲此目的。

+0

'int map [SIZE]'將分配到任何分配foo對象的位置,這可能是堆棧,堆,靜態數據區或其他任何地方 –