这是我的代码
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;
为什么我会在最后一行代码中收到错误消息:“没有可行的重载'='”。
答案 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
(因为b
是Box**
,所以b[0]
是Box*
)。您正在尝试为其指定一个指针,这是一个错误(除非Box
可以从指针转换)。b
指向的内存,因此无论如何解除引用它都是一个错误。删除该行。根据您之后计划对b
执行的操作,分配b = NULL
以避免悬空指针可能是有意义的。