Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从自定义数组中删除元素_C++_Arrays - Fatal编程技术网

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

C++ 如何从自定义数组中删除元素,c++,arrays,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; 框**b=0; //为行元素分配的内存。 b=新框

下面是我的代码

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;
框**b=0;
//为行元素分配的内存。
b=新框*[行];
//为每列的元素分配的内存。
对于(int i=0;i

为什么在代码的最后一行出现错误:“没有可行的重载“=”。

代码中有一些错误。首先,当您的类型是
Box
时,为什么要分配
int
?这应该是
b=新框*[行]
b[i]=新框[列]分别为

此外,您正在尝试设置一个内存位置,该位置以前已通过
删除
释放,这是危险的,可能会导致不可预见的后果

这条线

b[0][0] = NULL;

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

new int*
将返回一个
int**
。编译器抱怨此
int**
无法转换为
Box**
(类型为
b
)。

您声明了一个
Box
的锯齿数组,但分配了
新int*[]
-这是怎么回事

而且
b[0][0]
将是
Box&
类型。除非

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

    • 您没有在类框中重载“=”

      b[0][0] = NULL;
      
      这是错误的,原因有二:

      • b[0][0]
        指的是对象类型
        Box
        (因为
        b
        Box**
        ,所以
        b[0]
        Box*
        )。您试图将指针指定给它,这是一个错误(除非
        Box
        可从指针转换)
      • 您刚刚删除了
        b
        指向的内存,因此取消对它的引用仍然是一个错误

      把那条线去掉。根据您计划在以后对
      b
      执行的操作,分配
      b=NULL
      以避免指针悬空可能是有意义的。

      +1对于实际使用数组
      delete[]
      ,即使您混淆了其余部分:)最后一行可能会给您一个运行时错误,当您写入未分配的内存时。我还没有看到如此混乱的代码:/抱歉,伙计们,我编辑了我的代码。这应该是正确的