Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2013, 18:06   #1
erslgoeirjh
Форумчанин
 
Регистрация: 19.05.2009
Сообщений: 153
По умолчанию Проблема при перегрузке операторов в классе

Я создал класс myNVector для работы с векторами произвольного размера:

в заголовочном файле:

Код:
class myNVector
{
public:
myNVector();
myNVector(int n);
myNVector(int n, long double *massif);
~myNVector();
myNVector& operator=(const myNVector &vect);
friend const myNVector& operator+(const myNVector& vect1, const myNVector& vect2);
//...
public:
int n; // размерность вектора
long double *massif; // элементы вектора
}
в cpp-файле:

Код:
//...

myNVector::myNVector()
{
    n = 0;
    massif = NULL;
}

myNVector::myNVector(int n)
{
    int i;

    this->n = n;
    this->massif = new long double[n];
    for (i=0; i<n; i++)
    {
        this->massif[i] = 0.0;
    }
}

myNVector::myNVector(int n, long double *massif)
{
    int i;
    
    this->n = n;
    this->massif = new long double[n];
    for (i=0; i<n; i++)
    {
        this->massif[i] = massif[i];
    }
}

myNVector::~myNVector()
{
    if (massif != NULL)
    {
        delete []massif;
        massif = NULL;
    }
    n = 0;
}

myNVector& myNVector::operator=(const myNVector &vect)
{
    int i;
    long double* p;

    if (this->massif != NULL)
    {
        p = this->massif;
        delete []p;
        this->massif = NULL;
    }
    this->n = vect.n;
    this->massif = new long double[n]; 
    memmove(this->massif, vect.massif, this->n*sizeof(long double));
    return *this;
}

const myNVector& operator+(const myNVector& vect1, const myNVector& vect2)
{
    int i;
    myNVector  resvect;

    resvect.n = vect1.n;
    resvect.massif = new long double[resvect.n];

    for (i=0; i<vect1.n; i++)
    {
        resvect.massif[i] = vect1.massif[i] + vect2.massif[i];
    }
    return resvect;
}

// ...
В основной программе:


Код:
myNVector AVect(2), Avect2(2), Ares(2);

Avect.massif[0] = 7.0;
Avect.massif[1] = 8.0;
Avect2.massif[0] = 9.0;
Avect2.massif[1] = 10.0;

Ares = Avect + Avect2;
И вот на этой последней строке

Код:
Ares = Avect + Avect2;

программа бьётся. Выскакивает окно с сообщением:


Цитата:
Debug Error!
Program: f:\Roman\Roman\testvecmat.exe
Invalid allocation size: 4294967295 bytes
(Press Retry to debug the application).

В отладчике в функции operator+(const myNVector& vect1, const myNVector& vect2) всё нормально, а потом происходит обращение к функции operator=(const myNVector &vect) и там с самого начала у переменной vect поле n равно -858993460 , а поле massif вообще не читается.

В чём причина этого? Как исправить ошибку, чтобы Ares = Avect + Avect2; нормально работало?
erslgoeirjh вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при перегрузке << и >> DartDayring Visual C++ 8 07.12.2020 13:42
Тип возвращаемого значения при перегрузке операторов Igor95 Общие вопросы C/C++ 1 22.04.2013 23:02
перегрузка операторов дружеской ф-ции в шаблонном классе Rayzor Общие вопросы C/C++ 1 24.05.2012 14:29
Несколько вопросов по перегрузке операторов toha_master Помощь студентам 0 05.05.2012 19:17
Ошибка при перегрузке операторов. bill Общие вопросы C/C++ 1 26.01.2012 21:17