2014-03-05 3 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 >>, b)는 루프에있는에도 불구하고 항상 동일한 인덱스 ([5]'A) 그 경계에서의이 배열 5는 i) – Borgleader

답변

5

당신은 아마 cin >> arry[i];i하지 5을 의미한다.

1

멤버 함수 setInf에서 오타를 만들었습니다. 한정자 const를 통한 매개 변수를 선언 할 필요가 없지만 다음 제대로

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

을 정의하는 대신 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가 있어야 단순히

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

또는

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

사용자가 배열이 배열의 요소를 변경할 수있을 때 또한이 const가 아닌 버전을 정의 할 수 있습니다.

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