如何从自定义数组中删除一个元素。

3
这是我的代码,如下所示。
Box **b = 0;
//memory allocated for elements of rows.
b = new Box *[ROWS] ;

//memory allocated for  elements of each column.
for( int i = 0 ; i < ROWS ; i++ )
    b[i] = new Box[COLUMNS];       

b[0][0] = NULL;

为什么我会收到错误提示:“在代码的最后一行出现无效重载'='”?

即使您在其他方面混淆了很多内容,但是使用数组 delete[],这对你来说是加分项 :) - sehe
1
最后一行可能会给你一个运行时错误,因为你写入了未分配的内存。 - Some programmer dude
我还没有看到过这么糟糕的代码 :/ - Constantinius
抱歉,各位,我修改了我的代码。现在应该没问题了。 - czhao
5个回答

0

new int* 会返回一个 int**。编译器报错说这个 int** 无法转换为 Box**(即变量 b 的类型)。


0

你声明了一个 jagged 数组的 Box,但是却赋值了 new int*[] - 这是怎么回事?

此外,b[0][0] 的类型将会是 Box&。除非:

  • Box::Box 有一个隐式构造函数,接受一个可以转换为 NULL 的参数类型
  • Box::Box 定义了一个赋值运算符重载,接受这样的参数

0

在类Box中你没有重载'='运算符


0

你的代码中有一些错误。首先,当你的类型是Box时,为什么要分配int?应该相应地改为b = new Box *[ROWS]b[i] = new Box[COLUMNS];

此外,你正在尝试设置一个之前用delete释放过的内存位置,这是危险的,可能会导致意想不到的后果。

这一行

b[0][0] = NULL;

不可能,因为您在 b[0][0] 处的类型不是 Box* 而是 Box


0
b[0][0] = NULL;

有两个原因使这是错误的:

  • b[0][0] 引用了一个对象类型 Box(因为 bBox**,所以 b[0]Box*)。你试图为它赋值一个指针,这是一个错误(除非 Box 可以从指针转换)。
  • 你刚刚删除了 b 指向的内存,因此对其进行解引用是不正确的。

只需删除那一行。根据您计划之后对 b 进行的操作而定,将 b = NULL 赋值可能是有意义的,以避免悬空指针。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接