0

変数をコンソールに渡すとcout、. 他のすべては正常に機能しているようです。ここで何が欠けていますか?lettercase-858993460

だからここに私のコードのサンプルがあります:

主なものは次のとおりです。

int main()
{
    int lettercase = 0;
    Switch switcher(lettercase);
    lettercase = switcher.getLettercase();
    cout << "Lettercase: " << lettercase << endl;

    return 0;
}

という別のクラスもありますSwitch。ヘッダー ファイルのサンプルを次に示します。

class Switch {
public:
    // DEFAULT CONSTRUCTOR
    Switch();

    // OVERLOAD CONSTRUCTOR
    Switch(int);

    // DESTRUCTOR
    ~Switch();

    // Lettercase accessor
    int getLettercase();

private:
    int lettercase;
};

そして、ここに私の定義のサンプルがあります:

// DEFAULT
Switch::Switch() {
    int lettercase = 0;
}

// OVERLOAD
Switch::Switch(int lettercase) {    
    // CHANGE LETTER CASE
    if (lettercase == 1) {
        lettercase = 0;
    } else {
        lettercase = 1;
    }
}

// DESTRUCTOR
Switch::~Switch() {
}

// ACCESSOR
int Switch::getLettercase() {
    return lettercase;
}
4

1 に答える 1

7
// OVERLOAD
Switch::Switch(int lettercase) {    
    // CHANGE LETTER CASE
    if (lettercase == 1) {
        lettercase = 0;
    } else {
        lettercase = 1;
    }
}

ここにスコープの問題があります。クラス変数 を変更しようとしていますlettercaseが、コンストラクタの引数も と呼ばれているため、クラス変数にアクセスする場合lettercaseは を使用する必要があります。this->lettercaseここでパラメータの名前を変更することをお勧めします。

このようなもの:

// OVERLOAD
Switch::Switch(int initCase) {    
    // CHANGE LETTER CASE
    if (initCase == 1) {
        lettercase = 0;
    } else {
        lettercase = 1;
    }
}

奇妙な int を取得していた理由は、スコープの問題によりクラス変数lettercaseを初期化できなかったにもかかわらず、ゲッターがまだこの変数にアクセスして初期化されていない値を返していたためです。

編集:デフォルトのコンストラクターにも問題があります。

Switch::Switch() {
    int lettercase = 0;
}

これは、あなたが思っていること (またはあなたがやりたいこと) をしていません。クラス変数 を初期化するのではなくlettercase、新しい変数 , lettercase(スコープ) を作成し、それを 0 に初期化します。代わりに、デフォルトのコンストラクターは次のようになります。

Switch::Switch() {
    lettercase = 0;
}
于 2013-10-01T21:13:32.640 に答える