Я написал код, но он не работает. Каждый раз, когда я запускаю программу, я получаю эту ошибку
Ошибка проверки времени выполнения # 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;
}
Также вы можете помочь с оператором подписки, я просто не понимаю, как их объявлять и использовать. Также кажется довольно глупым писать программу, не понимая ее в первую очередь, но в любом случае помощь будет полезна 🙂
Вы, наверное, имеете в виду cin >> arry[i];
— i
не 5
,
Вы сделали опечатку в функции-член 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];
}
Также вы можете определить его неконстантную версию, когда пользователь может изменить элементы массива 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;
}