获得一个奇怪的int值

时间:2013-10-01 21:08:42

标签: c++

当我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;
}

1 个答案:

答案 0 :(得分: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,但你的getter仍然访问这个变量并返回未初始化的值。

编辑:你的默认构造函数也有问题,在这里:

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

这不是你认为它正在做的事情(或者你想要它做什么)。这不是初始化类变量lettercase,而是创建一个新变量lettercase,(范围)并将其初始化为0.相反,您的默认构造函数应如下所示:

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