2012-11-14 229 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,但不要刪除它。

相關問題