-2

プログラムの 1 つでプライベート クラス変数にアクセスできません。このテスト プログラムを作成しましたが、何が間違っているのかまだわかりません。

test.h

class Test
{
private:
    int Number;
public:
    int Randomize();
};

test.cpp

#include "test.h"
#include <iostream>

int Test::Randomize()
{
    Number == 1;
    std::cout << Number;
    return Number;
}

main.cpp

#include "test.h"
#include <stdio.h>

int main(int argc, char* argv[])
{
    Test test;
    int result = test.Randomize();
    printf ("Number = %d", result);
    return 0;
}

コンパイル時にこの警告が表示されます

test.cpp:6:9: warning: expression result unused [-Wunused-value]
        Number == 1;

そしてそれは出力しています

134514363Number = 134514363

何が起こっているのかわかりません。私は多分その範囲外だと思っています。しかし、私はそれがまだうまくコンパイルされていることを意味します。私が正しくやっていなければ、Numberにまったくアクセスできないと思っていました。

どんな助けでも大歓迎です。ありがとう

4

5 に答える 5

3

==2 つのオペランドが等しいかどうかをチェックする等価演算子です。=右オペランドの評価の値を左オペランドに配置する代入演算子です。

が何かを行うために使用されていないことを示す警告 (コンパイラ エラーではない) を与えていますNumber == 1;。これは、プログラマーの間違いである可能性が非常に高いです (たとえば、=代わりに使用するつもりかどうかを尋ねています)。

最後に、134514363C および C++ では、変数を何も設定しないと、そこのメモリにたまたまあったものに基づいて、予測できないランダムな値を持つためです。基本的に、C/C++ は宣言時に変数を初期化しません。

一般に、コンパイラの警告は読む価値があります。通常は、プログラムの間違いを意味します。

于 2013-05-21T02:04:11.240 に答える
3

==は比較演算子です。オペランドが等しい場合は aboolを返します。true

=代入演算子です。右側のオペランドを左側のオペランドに割り当て、最初のオペランドを (左辺値として) 返します。

したがって、Number == 1コンパイラに「Numberが 1 に等しいかどうかを確認する (そしてそのような比較の結果を破棄する)」ように指示しています。コンパイラがこれについて警告していることに注意してください-彼は、結果が破棄される副作用のない式があるとあなたに言います。これは明らかに役に立たない命令であり、したがって「疑わしい」(したがって警告)。

代わりに、必要なのはNumber = 1、つまり「Number1に設定」です。

言い換えれば、ここでの問題はNumber、コード内で に明確な値を割り当てておらず ( のスペルを間違えたため=)、Number「不明確な」値のままであるということです (これは、プログラムではたまたま 134514363 であり、おそらくCRT 初期化ルーチンによってスタックに残されたガベージ)。

于 2013-05-21T02:06:12.263 に答える
2

演算子を使用しているこの行はequality、結果が破棄されているため、次の警告が表示されます。

Number == 1;

=演算子である which を使用する必要がありassignmentます:

Number = 1;
于 2013-05-21T02:04:01.617 に答える
1

ここでは (割り当て)==の代わりに (比較) を使用します。=

int Test::Randomize()
{
    Number == 1; // oops!
    std::cout << Number;
    return Number;
}

ここでの比較は何もしないので、印刷時にごみの値が使用されます。

于 2013-05-21T02:04:09.560 に答える
1

あなたはあなたの番号で何もしていません.コンパイラはあなたに警告さえしました. また、デバッガーはあなたの友達です。

于 2013-05-21T02:05:56.610 に答える