析构函数和构造函数

时间:2012-11-14 18:24:14

标签: c++

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

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 个答案:

答案 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。此代码非常简单,您甚至不应该newdelete整数。只需将nd存储为类成员。您的代码,即使是已修复的代码,也会在您新代码时泄漏,但不会将其删除。