2016-03-12 114 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对象的位置,这可能是堆栈,堆,静态数据区或其他任何地方 –