2012-11-14 91 views
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; 
} 
+0

但是n不是类的一部分,你不能在析构函数中使用它而不声明它 – imreal

+1

为了将来的参考,在请求帮助时请包括类定义的其余部分! – Rook

回答

1
Rationalnumber::~Rationalnumber(){ 
delete n; 
} 

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

你已经宣布但构造n,但毕竟是当地到only.The析构函数(或任何其他功能)不能访问该变量(在其他功能或构造函数声明)构造函数。

+0

谢谢!这似乎是最清楚的答案; D – jyim

2

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

你可能希望它是在类的成员变量:

class Rationalnumber { 
    int* n; 
    int* d; 
    ......... 
}; 
3

n是在类的构造函数的局部变量。当构造函数完成时超出范围时,它不再可见于应用程序的任何其他部分;该内存已被泄漏。

在调用析构函数的地方没有本地或成员变量n,因此:未在此范围内声明。

0

您在构造函数的作用域中定义n。此代码非常简单,您甚至不应该使用newdelete整数。只需将nd作为班级成员存储即可。你的代码,甚至是固定的,在你新建它时会泄漏d,但不要删除它。

相关问题