2012-03-19 85 views
2
int sizex = 3; 
int sizey = 3; 
int * grid; 
grid = new int [sizex][sizey]; // Line 6 
grid = {{0}}; 

我想在这里声明数组,但是编译器说预期的构造函数,析构函数或类型转换“=”令牌”

Line 6: error: expected constructor, destructor, or type conversion before '=' token

你能帮助我弄清楚为什么?

+0

@Oli看不到第3行显然;) – 2012-03-19 21:14:44

回答

4

因为语法是错误的。这不是你如何分配内存。

如果你想有一个矩阵,你可能想

int** grid; 

,你分配内存是这样的:

grid = new int*[sizex]; 
for (int i = 0 ; i < sizex ; i++) 
    grid[i] = new int[sizey]; 

而且,分配grid = {{0}};并没有真正意义,你已经为grid分配的内存之后。

不要忘记删除内存。

+0

它不起作用。看看有什么不对:http://codepad.org/1qczj8QH – user1277552 2012-03-19 20:24:48

+0

@ user1277552它确实有效,但你没有把它放在上下文中。把它放在'main'或其他函数中。 – 2012-03-19 20:32:31

+0

@ user1277552 there - http://codepad.org/3Gi4vIEB - 我也说分配后的'grid = {{0}}'分配没有意义。 – 2012-03-19 20:35:34

0

您不能使用该语法直接在C++中创建2d数组。虽然您可以使用评论(int (*p)[6] = new int[3][6];)中提到的有点模糊的语法,但我不建议这样做,因为它可能会使代码过于复杂。

相反,你想要的是矢量矢量。由于C++不是垃圾收集,因此使用矢量可以有效地防止内存管理。

std::vector<std::vector<int> > grid(sizex, std::vector<int>(sizey));

+0

Pedantry alert:你的第一句话并不完全准确。像这样的东西是有效的:'int(* p)[6] = new int [3] [6];'。 – 2012-03-19 20:35:27

0
int main(){ 
     int** grid; 
     int sizex = 5; 
     int sizey = 5; 
     grid = new int*[sizex]; 
     for (int i = 0 ; i < sizex ; i++) 
     grid[i] = new int[sizey]; 

// ... a lot of code 

// .. deleting: 
     for (int i = 0 ; i < sizex ; i++) 
      delete [] grid[i]; 
     delete [] grid; 
    } 
+0

这与20分钟前发布的答案有何不同? – 2012-03-19 20:33:13

+0

它的编译,我只是很惊讶你的错误,并把所有东西放在这里,是错的? – 2012-03-19 20:38:10

1

如已经由Luchian和Mark B,使用new以创建2D阵列是不正确说明。

如果你想初始化所有的元素使用下面的结构:

grid = new int*[sizex]; 
for (int i = 0 ; i < sizex ; i++) 
    grid[i] = new int[sizey](); 
         //^^ 

这将初始化的元素为零。

不能使用:

grid = {{0}}; 

的分配:{}只能在初始化时使用。

+0

+1用于演示值初始化。 – ildjarn 2012-03-19 21:04:49

相关问题