2013-10-01 69 views
0

當我cout我的lettercase變量到控制檯,我得到-858993460。其他一切似乎都可以正常工作。我在這裏錯過了什麼?獲取一個奇怪的int值

因此,這裏是我的代碼示例:

這裏的主:

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; 
} 
+8

你有一百萬評論註釋每一個瑣碎,但你設法給類成員和函數參數*相同的名稱*?!談論C++達爾文獎的需求...... –

+5

-858993460不是一個奇怪的值。轉換爲十六進制,它是0xcccccccc。每當你在調試版本中使用MSVC++時,在調試器中看到它時,你就會「啊,我正在使用一個未初始化的變量!」。標準錯誤。 –

+0

@Janisimo:除了答案中提到的問題,構造函數中還存在類似的問題。您正在初始化構造函數中的局部變量,而類成員仍未初始化。 – AnT

回答

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,但你的吸氣劑仍在訪問該變量並返回未初始化的原因值。

編輯:您的默認構造函數也有一個問題,在這裏:

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

這不是做你覺得它在做什麼(或者你想讓它做什麼)。而不是初始化類變量,lettercase,這是創建一個新的變量,lettercase,(範圍),並把它初始化爲0。相反,你的默認構造函數應該是這樣的:

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

構造函數中存在類似的問題。該代碼聲明和初始化構造函數中的局部變量,而類成員保持未初始化狀態。 – AnT

+2

@AndreyT編輯:我明白你在說什麼。現在我編輯了我的答案來涵蓋這個問題。 – nhgrif

+0

非常感謝。我真的必須更多地考慮這一點。 –