![](/img/trans.png)
[英]expected constructor, destructor, or type conversion before ‘*’ token
[英]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}};
我试图在这里声明一个数组,但是编译器说
第6行:错误:“ =”令牌之前的预期构造函数,析构函数或类型转换
你能帮我弄清楚为什么吗?
因为语法错误。 那不是您分配内存的方式。
如果需要矩阵,则可能需要
int** grid;
然后分配内存,如下所示:
grid = new int*[sizex];
for ( int i = 0 ; i < sizex ; i++ )
grid[i] = new int[sizey];
另外,分配grid = {{0}};
在为grid
分配内存之后,并没有什么意义。
不要忘记删除内存。
正如Luchian和Mark B所述,使用new
创建2D数组是不正确的。
如果要初始化所有元素,请使用以下构造:
grid = new int*[sizex];
for (int i = 0 ; i < sizex ; i++)
grid[i] = new int[sizey]();
//^^
这会将元素初始化为零。
您不能使用:
grid = {{0}};
用于分配: {}
仅可在初始化时使用。
您不能使用该语法在C ++中直接创建2d数组。 虽然您可以使用注释中指出的有些晦涩的语法( int (*p)[6] = new int[3][6];
),但我不建议这样做,因为这可能会使您的代码过于复杂。
相反,您想要的是向量的向量。 有效地使用向量会使您的内存管理变得万无一失,因为C ++不会被垃圾收集。
std::vector<std::vector<int> > grid(sizex, std::vector<int>(sizey));
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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.