0 / 0 / 1
Регистрация: 12.07.2013
Сообщений: 79
1

Ошибка при перегрузке операторов в классе

08.11.2013, 18:03. Показов 419. Ответов 2
Метки нет (Все метки)

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

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

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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-файле:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//...
 
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;
}
 
// ...

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


C++
1
2
3
4
5
6
7
8
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;

И вот на этой последней строке

C++
1
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; нормально работало?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.11.2013, 18:03
Ответы с готовыми решениями:

Ошибка при перегрузке операторов
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; class fraction { public: int numerator; int...

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

Ошибка в перегрузке операторов?
не могу понять в чем ошибка class cMatrix { private: int rows; int columns; public:

Ошибка при перегрузке "operator ==" в классе
Если объявляю operator== в классе, то ошибка слишком много параметров для функции оператора ...

2
Эксперт С++
4974 / 3082 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
08.11.2013, 18:12 2
Что-то я не вижу тут ошибок. Ты точно всё показал?
0
3656 / 2843 / 781
Регистрация: 25.03.2012
Сообщений: 10,429
Записей в блоге: 1
08.11.2013, 18:45 3
Оператор плюс должен возвращать не ссылку, а сам экземпляр класса. Ссылка ссылается на лишь временный объект

Добавлено через 26 минут
C++
1
friend myNVector operator+(myNVector vect1, myNVector vect2);
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.11.2013, 18:45

Конфликт при перегрузке операторов
Здравствуйте ,изучаю C++ и делая очередное задание столкнулся с проблемой (привожу код ниже)...

Ошибки при перегрузке операторов
Ну не могу,не получается самостоятельно разобрать свои ошибки(( Они по большей части повторяются....

Ошибка в перегрузке операторов для класса - итератора
Добрый вечер. Есть заготовка программы для работы с матрицей, построенной из узлов с четырьмя...

Ошибки при перегрузке операторов класса
Задали в универе для класа триугольника с полями 3х сторон реализовать перегрузку операторов &lt;&lt;,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru