c ++以错误的方式传递值?

时间:2012-12-08 20:17:06

标签: c++

当我将一个对象传递给一个函数时,我得到了不希望的结果。当我通过Character的action()函数传递Mage时,似乎就会发生这种情况。

以下是我的代码的一些信息:

character.h

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

    protected:
        maxLives;
        maxCraft;
    };

character.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; 
    }

driver.cpp

    int main () {
        Character c1;
        Mage m1;

        m1.action(c1);

我的输出给了我以下内容:

Max Craft:728798402(数量不尽相同)

Max Lives:5


然而,如果在我的潜水员中,我会这样做:

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

我明白了:

Max Craft:10

Max Lives:5

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

看起来你的意思是MaxCraft = 10;(在你的默认构造函数中)实际上是maxCraft = 10;。正如@chris在评论中所说,看起来你正在使用一些允许隐式类型变量的(邪恶的,邪恶的)C ++扩展,因此MaxCraft = 10;行只是定义一个名为MaxCraft的新变量