Операция перегрузки не видит динамические массивы, заданные в методе класса

Как передать значение динмачиеских массивов из метода класса в метод перегрузки? Пробовала и глобально объявлять переменные, используемые массивами, ничего не получается :( Нужно, чтобы перегружался оператор индексации


    #include <iostream>
    using namespace std; 

    class MainClass 
    {
        public:
        int x, y;
        int* mass1 = new int[x];
        int* mass2 = new int[y];
        void Zapolnenie();
        void Vzyatie();
        int& operator[](int index)
        {
            return  mass1[index];
        }

    };

    void MainClass::Zapolnenie()
    {   

    };
    void MainClass::Vzyatie()
        {
        int vibor;
        cout << "Выберите дальнейшее действие:" << endl;
        cout << "1. Взять элемент из списка 1" << endl;
        cout << "2. Взять элемент из списка 2" << endl;
        cout << "3. Взять элемент из обоих списков" << endl;
        cin >> vibor;
        switch (vibor)
        {
        case 1:
            MainClass vivod;
            int a;
            cout << "Введите номер элемента, который вам нужен: " << endl;
            cin >> a;
            cout << vivod[a] << endl;
            break;

            }
        };


    int main()
    {
        setlocale(LC_ALL, "Russian");

        MainClass A;
        cout << "Введите размер первого списка: ";
        cin >> A.x;
        cout << "Введите размер второго списка: ";
        cin >> A.y;

        for (int i = 0; i < A.x; i++)
        {
            A.mass1[i] = 1 + rand() % 10;
            cout << A.mass1[i] << " ";
        };
        cout << endl;
        for (int j = 0; j < A.y; j++)
        {
            A.mass2[j] = rand();
            cout << A.mass2[j] << " ";
        };
        cout << endl;

        A.Vzyatie();

        return 0;
    }

Ответы (1 шт):

Автор решения: Maggot

Ну создали вы новый объект... он же не тот)

        MainClass vivod;
        int a;
        cout << "Введите номер элемента, который вам нужен: " << endl;
        cin >> a;
        cout << vivod[a] << endl;

далее -

cout << vivod[a] << endl;

может вы хоnели написать это?

cout << this->operator[](a) << endl;

Пару слов:

1) Не используйте голые указатели - для этого есть контейнеры и умные указатели реализующие RAII - link https://en.cppreference.com/w/cpp/language/raii

2) rand() такое себе пдсч - есть - https://en.cppreference.com/w/cpp/numeric/random

пример в функции GenRandInt

Вот пример Вашего кода:

#include <iostream>
#include <memory>
#include <limits>
#include <random>

class MainClass
{
  public:
  MainClass() : mass1(nullptr), size_m1(0) {}

  void create(std::size_t size) {
    if (mass1 != nullptr) {
      this->mass1.reset();
    }
    this->mass1 = std::make_unique<int[]>(size);
  }

  std::unique_ptr<int[]>& get_m1() {
    return this->mass1;
  }

  int& operator[](std::size_t index) {
    if (index < this->size_m1) {
      throw std::out_of_range("Range error");
    }
    return this->mass1[index];
  }

  private:
    std::unique_ptr<int[]> mass1;
    std::size_t size_m1;
};

int GenRandInt(int low = std::numeric_limits<int>::min(), int high = std::numeric_limits<int>::max()) {
  static std::random_device r_dev{};
  static std::mt19937_64 mt_engine(r_dev());
  static std::uniform_int_distribution<> u_int_d; 
  u_int_d = std::uniform_int_distribution<>{static_cast<int32_t>(low), static_cast<int32_t>(high)};
  return static_cast<int>(u_int_d(mt_engine));
}

int main() {
  MainClass mc{};
  mc.create(10);

  for (std::size_t i{0}; i < 10; ++i) {
    mc[i] = GenRandInt();
  }

  for (std::size_t i{0}; i < 10; ++i) {
    std::cout << mc[i] << std::endl;
  }

  return 0;
}
→ Ссылка