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

时间:2011-11-30 10:47:23

标签: c++ arrays

这是我的代码

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;

为什么我会在最后一行代码中收到错误消息:“没有可行的重载'='”。

5 个答案:

答案 0 :(得分:0)

您的代码中存在一些错误。首先,为什么在类型为int时分配Box?这应该分别是b = new Box *[ROWS]b[i] = new Box[COLUMNS];

此外,您正在尝试设置一个以前使用delete释放的内存位置,这很危险并可能导致无法预料的后果。

这一行

b[0][0] = NULL;

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

答案 1 :(得分:0)

new int*将返回int**。编译器正在计算此int**无法转换为Box**b的类型)。

答案 2 :(得分:0)

你声明了一个Box的锯齿状数组,但却分配了new int*[] - 那里发生了什么?

同样b[0][0]的类型为Box&。除非

,否则您无法指定NULL
  • Box::Box有一个隐式构造函数,它接受NULL可转换的类型的参数
  • Box::Box定义了一个带有这样一个参数的赋值运算符重载

答案 3 :(得分:0)

你在课堂上没有超载'='

答案 4 :(得分:0)

b[0][0] = NULL;

这有两个原因:

  • b[0][0]指的是对象类型Box(因为bBox**,所以b[0]Box*)。您正在尝试为其指定一个指针,这是一个错误(除非Box可以从指针转换)。
  • 您刚刚删除了b指向的内存,因此无论如何解除引用它都是一个错误。

删除该行。根据您之后计划对b执行的操作,分配b = NULL以避免悬空指针可能是有意义的。