0

我写了一个代码,但它似乎不起作用。每次执行程序时,我都会收到此错误

运行时检查失败 #2 - 变量 'ary' 周围的堆栈已损坏

无论如何,这是我的代码(这是一个小代码)

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

你也可以帮助下标运算符吗,我似乎不明白如何声明和使用它们。同样,在没有首先理解程序的情况下编写程序似乎很愚蠢,但无论如何,我们将不胜感激:)

4

2 回答 2

5

你的意思可能是cin >> arry[i];—— i,不是5

于 2014-03-05T00:52:40.027 回答
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];
}

当用户可以更改数组数组的元素时,您也可以定义其非常量版本。

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;
}
于 2014-03-05T00:53:47.253 回答