Не компилируется код C++

228
29 января 2018, 06:28

Код:

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

Где здесь ошибка? Что-то в выделении памяти?

Answer 1

Ошибки при компиляции тут нет. Ошибка при выполнении - да, это есть.

Что вы возвращаете тут?

Array Array::operator[](int j)
{
    return arr[j];
}

Новый объект Array с количеством членов, равным значению arr[j]. А потом пытаетесь присвоить ему что-то - с помощью генерируемого по умолчанию оператора присваивания. Т.е. делаете полную ерунду, которую долго расписывать (да и нужно ли?)...

Вы явно хотели следующее:

int& Array::operator[](int j)
{
    return arr[j];
}
Answer 2

Вы инициализируете указатель не в конструкторе, а сразу в обьявлении

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] )
    { }
//...
};
READ ALSO
Окно появляется и сразу исчезает

Окно появляется и сразу исчезает

Я хочу вывести График, после нажатой кнопкиНо у меня окошко появляется и сразу исчезает

207
QT, C++, Linux и Vim

QT, C++, Linux и Vim

Недавно решил перейти к изучению С++ и QT (до этого изучал Си) и хотел прояснить несколько вещей для себяПрошу не ругать меня строго, так как...

317
Разбить элементы массива на группы и преобразовать их

Разбить элементы массива на группы и преобразовать их

Помогите, пожалуйста, решить задачу по программированию в с++Разбить элементы массива на группы по 4

235
Множественная перегрузка операторов

Множественная перегрузка операторов

Неправильно сравнивает 2 массива, вместо false(-) выдает true(+)В чем проблема? (Функция помечена комментарием)

215