Метод не возвращает значение

242
29 мая 2018, 16:00
        class Setr
                {
                private:
                    int *ptr; // указатель на массив
                    int size; // размер массива
                public:
                    Setr();
                    Setr(int );
                    Setr(const Setr &);
                    ~Setr();
                    void setSetr();
                    void getSetr();
                    int &operator[] (int);
                    Setr &operator+= (const int &);
                    Setr &operator-= (const int &);
                    Setr operator+ (Setr &);
                    Setr operator* (Setr &);
                    Setr operator/ (Setr &);
                };    

        Setr Setr::operator+ (Setr &s)
            {
                Setr summ;
                int i = 0;
                summ.ptr[0] = ptr[i];
                for (i = 1; i < size; i++)
                {
                    summ += ptr[i];
                    summ.getSetr();
                }
                i = 0;
                bool f = false;
                for (i = 0; i < s.size; i++)
                {
                    for (int k = 0; k < size; k++)
                    {
                        if (s.ptr[i] == ptr[k])
                        {
                            f = true;
                            break;
                        }
                    }
                    if (f == true)
                    {
                        f = false;
                        continue;
                    }
                    else
                        summ += s.ptr[i];
                    summ.getSetr();
                }
                return summ;
            }
Setr::Setr()
{
    size = 1;
    ptr = new int[size];
    ptr[0] = 0;
}
Setr::Setr(int Setrsize)
{
    size = Setrsize;
    ptr = new int[Setrsize];
    for (int i = 0; i < Setrsize; i++)
        ptr[i] = 0;
}
Setr::Setr(const Setr &SetrToCopy)
    :size(SetrToCopy.size)
{
    ptr = new int[SetrToCopy.size];
    for (int i = 0; i < SetrToCopy.size; i++)
        ptr[i] = SetrToCopy.ptr[i];
}
Метод суммы не возвращает значение массива
Answer 1
Setr &Setr::operator+ (Setr &s)
{
    Setr summ;
    return summ;
}

У Вас в коде функция возвращает ссылку Setr &.

Ссылка возвращается на объект Setr summ;, который существует только внутри функции (а возвращается вы во вне), поэтому принимающая сторона получает ссылку на уже несуществующий объект (функция же закончила выполняться, все внутрифункционные объекты перестали существовать)

Поэтому для исправления ошибки просто возвращайте само значение:

Setr Setr::operator+ (Setr &s)
{
    Setr summ;
    return summ;
}

Произойдёт копирование Setr summ и всё будет в порядке.

P.S.

есть более извратный вариант - возвращать указатель

Setr* Setr::operator+ (Setr &s)
{
    Setr* summ = new Setr;
    return summ;
}

правда во-первых надо будет его самому потом удалять, а во-вторых вряд ли Вам нужны такие сложности (где-то такой код уместен, но избыточен для Вашего примера).

READ ALSO
xpath или css поиск по условию &ldquo;ИЛИ&rdquo;

xpath или css поиск по условию “ИЛИ”

Пишу локатор, необходимо чтобы он искал значение по условию, те одно условие или другое

197
Пропорции в видео

Пропорции в видео

Возможно ли как-то загрузить видео на страницу без сохранения пропорций?

215
Выпадающее меню на CSS3

Выпадающее меню на CSS3

Стараюсь создать выпадающее меню средствами CSS но подпункты в браузере не отображаютсяВижу только горизонтальное меню

252
Ошибка setTimeout

Ошибка setTimeout

Всем привет

207