0

当我coutlettercase变量转到控制台时,我得到-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,但是你的 getter 仍然在访问这个变量并返回未初始化的值。

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

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

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

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