Код:
#include "stdafx.h"
#include <iostream>
using namespace std;
class Array
{
int n;
int *arr = new int[n];
public:
Array(int n) : n(n)
{ }
Array operator[](int);
void display()
{
for (int i = 0; i < n; i++)
{
cout << arr[i] << " ";
}
}
int get_n()
{
return n;
}
~Array()
{
delete[] arr;
}
};
int main()
{
setlocale(LC_ALL, "rus");
Array a1(12), a2(5);
for (int i = 0; i < 12 ; i++)
{
a1[i] = i * 2;
}
a1.display();
system("pause");
return 0;
}
Array Array::operator[](int j)
{
return arr[j];
}
Где здесь ошибка? Что-то в выделении памяти?
Ошибки при компиляции тут нет. Ошибка при выполнении - да, это есть.
Что вы возвращаете тут?
Array Array::operator[](int j)
{
return arr[j];
}
Новый объект Array с количеством членов, равным значению arr[j]. А потом пытаетесь присвоить ему что-то - с помощью генерируемого по умолчанию оператора присваивания. Т.е. делаете полную ерунду, которую долго расписывать (да и нужно ли?)...
Вы явно хотели следующее:
int& Array::operator[](int j)
{
return arr[j];
}
Вы инициализируете указатель не в конструкторе, а сразу в обьявлении
class Array
{
int n;
int *arr = new int[n];
//...
естественно у вас будет и ошибка компиляции... Может вы просто проявили невнимательность, но нужно так:
class Array
{
int n;
int *arr;
public:
Array(int n) : n(n), arr( new int[n] )
{ }
//...
};
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости