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
你能帮助我弄清楚为什么?
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
你能帮助我弄清楚为什么?
因为语法是错误的。这不是你如何分配内存。
如果你想有一个矩阵,你可能想
int** grid;
,你分配内存是这样的:
grid = new int*[sizex];
for (int i = 0 ; i < sizex ; i++)
grid[i] = new int[sizey];
而且,分配grid = {{0}};
并没有真正意义,你已经为grid
分配的内存之后。
不要忘记删除内存。
它不起作用。看看有什么不对:http://codepad.org/1qczj8QH – user1277552 2012-03-19 20:24:48
@ user1277552它确实有效,但你没有把它放在上下文中。把它放在'main'或其他函数中。 – 2012-03-19 20:32:31
@ user1277552 there - http://codepad.org/3Gi4vIEB - 我也说分配后的'grid = {{0}}'分配没有意义。 – 2012-03-19 20:35:34
您不能使用该语法直接在C++中创建2d数组。虽然您可以使用评论(int (*p)[6] = new int[3][6];
)中提到的有点模糊的语法,但我不建议这样做,因为它可能会使代码过于复杂。
相反,你想要的是矢量矢量。由于C++不是垃圾收集,因此使用矢量可以有效地防止内存管理。
std::vector<std::vector<int> > grid(sizex, std::vector<int>(sizey));
Pedantry alert:你的第一句话并不完全准确。像这样的东西是有效的:'int(* p)[6] = new int [3] [6];'。 – 2012-03-19 20:35:27
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;
}
这与20分钟前发布的答案有何不同? – 2012-03-19 20:33:13
它的编译,我只是很惊讶你的错误,并把所有东西放在这里,是错的? – 2012-03-19 20:38:10
如已经由Luchian和Mark B,使用new
以创建2D阵列是不正确说明。
如果你想初始化所有的元素使用下面的结构:
grid = new int*[sizex];
for (int i = 0 ; i < sizex ; i++)
grid[i] = new int[sizey]();
//^^
这将初始化的元素为零。
不能使用:
grid = {{0}};
的分配:{}
只能在初始化时使用。
+1用于演示值初始化。 – ildjarn 2012-03-19 21:04:49
@Oli看不到第3行显然;) – 2012-03-19 21:14:44