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 を定義します。このコードは非常に単純なのでnewdeleteint を使用する必要はありません。クラスメンバーとしてn保存するだけです。dあなたのコードは、修正されたとしても、新しいものとしてリークしますが、削除しないでください。

于 2012-11-14T18:27:29.750 に答える