2014-03-05 74 views
0

我寫了一個代碼,但它似乎並不工作。我每次執行程序時,我得到這個錯誤C++下標運算符

運行時檢查失敗#2 - 堆棧周圍的變量「元」是 損壞

反正這裏是我的代碼(這是一個小碼)

#include <iostream> 
using namespace std; 

class Arrayz{ 
private: 
    int arry[5]; 
public: 
    Arrayz(){} 
    void setInf(){ 
     for(int i = 0; i < 5; ++i){ 
      cout << "Enter age of your friends: "; 
      cin >> arry[5]; 
     } 
    } 
    const int& operator [](const int pos){ 
     return arry[pos]; 
    } 
}; 

int main(){ 
    Arrayz ary; 
    ary.setInf(); 
    cout << "Here are your friend's age: " << endl; 
    for (int i = 0; i < 5; ++i){ 
     cout << ary[i] << endl; 
    } 


    return 0; 
} 

也可以,你也幫助下標操作符,我似乎就是不明白如何聲明和使用它們。此外,它似乎很愚蠢寫一個程序而無需首先先了解它,但無論如何幫助,將不勝感激:)

+1

'CIN >> ARRY [5]'一)這是出界,二)它總是儘管在一個循環是相同的指數( 5應該是我) – Borgleader

回答

5

你大概的意思cin >> arry[i];i,不5

1

你在成員函數setInf中犯了一個錯字。取而代之的cin >> arry[5];應當有cin >> arry[i];

void setInf(){ 
    for(int i = 0; i < 5; ++i){ 
     cout << "Enter age of your friends: "; 
     cin >> arry[i]; 
    } 
} 

至於下標運算符,那麼你正確

const int& operator [](const int pos){ 
    return arry[pos]; 
} 

定義它雖然沒有必要宣佈與標識const參數。另外,運營商本身應該有標識const你可以寫簡單

const int& operator [](int pos) const { 
    return arry[pos]; 
} 

或者

int operator [](int pos) const { 
    return arry[pos]; 
} 

你也可以定義其非const版本時,用戶可以改變數組ARRY的元素。

int & operator [](int pos) { 
    return arry[pos]; 
} 

此外它是一個好主意,你的類有一個會返回數組大小的成員函數。例如

class Arrayz{ 
private: 
    static const size_t N = 5; 
    int arry[N]; 
public: 
    Arrayz(){} 
    void setInf(){ 
     for(int i = 0; i < N; ++i){ 
      cout << "Enter age of your friends: "; 
      cin >> arry[i]; 
     } 
    } 
    int operator [](int pos) const { 
     return arry[pos]; 
    } 

    int & operator [](int pos) { 
     return arry[pos]; 
    } 

    size_t size() const { return N; } 
}; 

而且在主,你可以寫

for (int i = 0; i < ary.size(); ++i){ 
    cout << ary[i] << endl; 
}