有人请向我解释为什么我会收到“错误:未在此范围内声明?”
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;
}
答案 0 :(得分:3)
n
是类构造函数中的局部变量。当构造函数完成时它超出范围时,它不再对应用程序的任何其他部分可见;记忆已被泄露。
在析构函数被调用的位置没有名为n
的本地或成员变量,因此:未在此范围内声明。
答案 1 :(得分:2)
" N"是构造函数中的局部变量。
您可能希望它成为类中的成员变量:
class Rationalnumber {
int* n;
int* d;
.........
};
答案 2 :(得分:1)
Rationalnumber::~Rationalnumber(){
delete n;
}
n
是班级成员吗?如果没有,那么它将给出错误,因为n
既未在析构函数中声明,也不是该类的成员。
然而,你已经在构造函数中声明了n
,但这只是构造函数的 local 。析构函数(或任何其他函数)无法访问该变量(在另一个函数或构造函数)。
答案 3 :(得分:0)
您可以在构造函数的范围内定义n。此代码非常简单,您甚至不应该new
和delete
整数。只需将n
和d
存储为类成员。您的代码,即使是已修复的代码,也会在您新代码时泄漏,但不会将其删除。