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