0

オブジェクトを関数に渡すと、望ましくない結果が得られます。aの action() 関数Characterを介して aを渡すと発生するようです。Mage

これが私のコードの一部です:

character.h

    class Character {
    public:
        Character();
        int getMaxLives() const;
        int getMaxCraft() const;

    protected:
        maxLives;
        maxCraft;
    };

キャラクター.cpp

    #include "character.h"

    Character::Character () {
        maxLives = 5;
        MaxCraft = 10;
    }

    int Character::getMaxLives() const {
        return maxLives;
    }

    int Character::getMaxCraft() const {
        return maxCraft;
    }

mage.h

    #include "character.h"

    class Mage {
    public:
        Mage();
        void action(Character c1);
    };

mage.cpp

    #include "mage.h"   

    Mage::Mage () { ... }
    void Mage::action(Character c1) {
        cout << "Max Craft: " << c1.getMaxCraft() << endl;
        cout << "Max Lives: " << c1.getMaxLives() << endl; 
    }

ドライバー.cpp

    int main () {
        Character c1;
        Mage m1;

        m1.action(c1);

私の出力は私に次のことを与えます:

マックスクラフト:728798402(番号は変動します)

最大命: 5


ただし、ダイバーの場合は、次のことを行います。

cout << "Max Craft: " << c1.getMaxCraft() << endl;
cout << "Max Lives: " << c1.getMaxLives() << endl; 

私は得る:

最大クラフト: 10

最大命: 5

何か案は?

4

1 に答える 1

4

MaxCraft = 10;(デフォルトのコンストラクターで)実際にmaxCraft = 10;. @chris がコメントで述べているように、暗黙的に型指定された変数を許可する (悪、悪) C++ 拡張機能を使用しているように見えるため、このMaxCraft = 10;行は単純に という名前の新しい変数を定義していますMaxCraft

于 2012-12-08T20:20:58.787 に答える