有人可以向我解释为什么我会收到“错误:未在此范围内声明”吗?
num 和 denom 是类 Rationalnumber 的私有成员。
谢谢!
Rationalnumber::Rationalnumber(){
num = 0;
denom = 1;
int * n = new int;
int * d = new int;
*n = num;
*d = denom;
}
Rationalnumber::~Rationalnumber(){
delete n;
}
有人可以向我解释为什么我会收到“错误:未在此范围内声明”吗?
num 和 denom 是类 Rationalnumber 的私有成员。
谢谢!
Rationalnumber::Rationalnumber(){
num = 0;
denom = 1;
int * n = new int;
int * d = new int;
*n = num;
*d = denom;
}
Rationalnumber::~Rationalnumber(){
delete n;
}
n
是类构造函数中的局部变量。当构造函数完成时超出范围时,应用程序的任何其他部分都不再可见;那个内存已经泄露了。
在调用析构函数时没有调用局部变量或成员变量n
,因此:未在此范围内声明。
“n”是构造函数中的局部变量。
您可能希望它成为类中的成员变量:
class Rationalnumber {
int* n;
int* d;
.........
};
Rationalnumber::~Rationalnumber(){
delete n;
}
是n
班级成员吗?如果不是,那么它将给出错误,因为n
既没有在析构函数中声明,也不是该类的成员。
但是,您已n
在构造函数中声明,但这仅对构造函数是本地的。析构函数(或任何其他函数)无法访问该变量(在另一个函数或构造函数中声明)。
您在构造函数的范围内定义 n 。这段代码非常简单,你甚至不应该使用new
整数delete
。只需存储n
并d
作为班级成员。你的代码,即使是固定的,也会在你新的时候泄漏,但不要删除它。