繁体   English   中英

'='标记之前的预期构造函数,析构函数或类型转换”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM