0

有人可以向我解释为什么我会收到“错误:未在此范围内声明”吗?

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;
}
4

4 回答 4

3

n是类构造函数中的局部变量。当构造函数完成时超出范围时,应用程序的任何其他部分都不再可见;那个内存已经泄露了。

在调用析构函数时没有调用局部变量或成员变量n,因此:未在此范围内声明。

于 2012-11-14T18:26:39.497 回答
2

“n”是构造函数中的局部变量。

您可能希望它成为类中的成员变量:

class Rationalnumber {
    int* n;
    int* d;
    .........
};
于 2012-11-14T18:25:57.913 回答
1
Rationalnumber::~Rationalnumber(){
delete n;
}

n班级成员吗?如果不是,那么它将给出错误,因为n既没有在析构函数中声明,也不是该类的成员。

但是,您已n在构造函数中声明,但这仅对构造函数是本地的。析构函数(或任何其他函数)无法访问该变量(在另一个函数或构造函数中声明)。

于 2012-11-14T18:27:20.263 回答
0

您在构造函数的范围内定义 n 。这段代码非常简单,你甚至不应该使用new整数delete。只需存储nd作为班级成员。你的代码,即使是固定的,也会在你新的时候泄漏,但不要删除它。

于 2012-11-14T18:27:29.750 回答